【发布时间】:2012-12-02 12:09:28
【问题描述】:
我正在制作一个路由协议,我需要为每个邻居设置 30 秒的非阻塞计时器,这是我通过线程实现的,这里是示例代码。但是,我检查它的值 2 或 0 以区分线程是超时还是被我停止(我通过设置结构变量的值来停止线程。)
问题是,我的值没有传递回主函数,并且我所知道的唯一解决方案 join 是阻塞的,但我需要非阻塞路由协议。任何帮助将不胜感激。谢谢。
struct arg_struct
{
int Wait_30sec;
int Alarm_port[5];
int index;
};
void* start_timer(void *arguments)
{
struct arg_struct *args = (struct arg_struct *)arguments;
int i;
clock_t endwait;
i = args->index;
endwait = clock() + args->Wait_30sec * CLOCKS_PER_SEC;
while (clock() < endwait && args->Alarm_port[i] == 0)
;
if(args -> Alarm_port[i]==0)
args -> Alarm_port[i]=2;
pthread_exit(NULL);
return NULL;
}
【问题讨论】:
-
没有 C/C++ 之类的东西
-
无论你使用什么结构来告诉线程要做什么,都要为线程留出空间来存储结果。
-
您可能希望使用库进行事件调度,例如libevent。使用它,您可以在一个线程中处理多个套接字和计时器。