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

How to return value from the thread back to main function without using blocking function in C++/C

本文关键字:函数 情况下 线程 返回 C++      更新时间:2023-10-16

我正在制作一个路由协议,我需要为每个邻居提供 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;
}

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

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

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

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

相关文章: