如何在不使用C ++ / C中的阻塞函数的情况下将值从线程返回到main函数

时间:2012-12-02 12:09:28

标签: c++ sockets timer routing

我正在制作路由协议,我需要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;
}

1 个答案:

答案 0 :(得分:0)

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

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

2)在调用线程之前,您是否设置了结构的index变量?

3)由于您等待的最终值中的错误,您的线程可能无法完成。尝试将当前值和结束值打印到stdout或文件,并查看循环是否终止。