如何在不使用 C++/C 中的阻塞函数的情况下将值从线程返回到主函数
How to return value from the thread back to main function without using blocking function in C++/C
我正在制作一个路由协议,我需要为每个邻居提供 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 或文件,并查看循环是否终止。
相关文章:
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- 为什么需要复制构造函数,在哪些情况下它们非常有用
- 在不传递参数数量且只有3个点的情况下,如何使用变差函数
- 在这种情况下,java对象是否可以调用本机函数
- 这个c++代码是如何在没有定义函数的情况下运行的
- 为什么不调用移动构造函数?(默认情况下只有构造器,没有别的)
- 如何在没有函数的情况下编写此代码并使C++更简单?
- 在这种情况下显式调用时,std::cout 如何更改析构函数的行为?
- A类的定义需要B类的定义,如何在不公开B的定义的情况下公开A的公共函数?
- 如何在不使用指针的情况下将派生类的对象作为参数传递给基类中的函数?
- 有没有办法在不使用 #ifdef 的情况下不编译发布版本中的单元测试函数体?
- C++ strcpy 函数在少数主要情况下失败
- C++有什么方法可以在既不调用函数模板也不提供其模板参数的情况下引用函数模板?
- 是否可以在不填充自己的参数的情况下将模板函数作为参数传递?
- 如何在没有复制构造函数的情况下为地图设置值?
- 在这种情况下,如何传递成员函数而不是函数?
- C++:带有大括号初始化列表的函数调用表达式 - 标准是否规定在单个元素列表的微不足道的情况下忽略大括号?
- 构造函数/解构函数情况下的'undefined reference to vtable for'
- c#和c++中虚函数情况下编译器行为的差异.这是我在一次采访中被问到的问题