我正在制作路由协议,我需要30秒非阻塞定时器,我通过线程实现每个邻居,这里是示例代码。但是,我检查它的值为2或0是为了区分线程是否超时或被我停止(我通过设置结构变量的值来停止线程。)
问题是,我的值不是传回main函数,而是我知道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;
}
答案 0 :(得分:0)
根据您的代码,当您将其地址传递给线程时,该值应反映到主线程中。我建议调试代码如下:
1)首先检查对线程的调用,并验证是否发送了正确的struct-variable的地址。然后看看你是否检查了结果的正确变量。
2)在调用线程之前,您是否设置了结构的index
变量?
3)由于您等待的最终值中的错误,您的线程可能无法完成。尝试将当前值和结束值打印到stdout或文件,并查看循环是否终止。