0

我正在制作一个路由协议,我需要为每个通过线程实现的邻居设置 30 秒的非阻塞计时器,这是示例代码。但是,我检查它的值 2 或 0 以区分线程是超时还是被我停止(我通过设置结构变量的值来停止线程。)

问题是,我的值没有传递回主函数,并且我知道的唯一连接解决方​​案是阻塞,但我需要非阻塞路由协议。任何帮助将不胜感激。谢谢。

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;
}
4

1 回答 1

0

根据您的代码,当您将其地址传递给线程时,该值应反映到主线程。我建议像这样调试代码:

1)首先检查您对线程的调用,并验证您发送的结构变量的地址是否正确。然后查看您是否检查结果的正确变量。

2)你index在调用线程之前设置了你的结构变量吗?

3)也许您的线程由于您等待的最终值中的错误而没有完成。尝试将当前值和结束值打印到标准输出或文件,并查看循环是否终止。

于 2012-12-02T12:54:12.643 回答