【发布时间】:2013-09-21 18:36:51
【问题描述】:
我有一个应用程序需要执行以下操作:
- 如果发生事件(与服务器断开连接),则会启动一个长计时器(例如 5 分钟)。然后应用程序会尝试重新连接到服务器。
- 如果重新连接失败,则会启动一个短计时器(20 秒),该计时器应尝试再次重新连接。
- 如果成功,长计时器应该继续继续运行。
- 当长定时器到期时,如果没有连接,应用程序应该退出,否则它应该正常继续。
我的限制在于我不能使用线程,只能使用进程。我也不能等待 reconnect() 的结果返回。
到目前为止,我有一个这样的设计:
int main(int argc, char **argv)
{
/* do main loop work, if disconnected, call reconnect() & continue doing work */
}
void reconnect()
{
pid = fork();
if (pid >= 0) {
/*Successful fork*/
if (pid == 0) {
rv = attempt_reconnect;
if (rv == 0) {
/*Notify sig_child Success*/
exit(0);
} else {
/*Notify sig_child Fail*/
exit(1);
}
}
}
}
void sig_child(int signum)
{
if(fork returned success) {
set flag to continue network stuff
}
else {
alarm(20);
}
}
void sig_alarm(int signo)
{
/*Received alarm, trying to reconnect...*/
reconnect();
}
任何帮助将不胜感激!
编辑
我想我有一个解决方案来自示例 here。它允许我创建具有单独 ID 的计时器,然后确定哪个已经向程序发出信号
【问题讨论】:
-
这将是特定于操作系统的。我假设您打算在 Linux 上工作?您不能使用线程有什么特别的原因吗?
-
是的,我在 Linux 上工作,该应用程序将在嵌入式 Linux 版本上运行,并且其中一个要求说线程不是一个选项
标签: c process timer signals alarm