我在同一个程序中有main()和线程。
有一个名为“status”的变量,可以获得多个值
我需要在变量发生变化时通知线程(线程cnat等待状态变量,它已经在进行流畅的任务)。
有一种简单的方法吗?类似于中断?信号怎么样?
主要内部的功能:
int main()
{
char *status;
...
...
while (1)
{
switch (status)
{
case: status1 ...notify the thread
case: status2 ...notify the thread
case: status3 ...notify the thread
}
}
}
如果有人可以给我一个例子那就太棒了! 谢谢!
答案 0 :(得分:1)
这个例子可能对你有帮助。
DWORD sampleThread( LPVOID argument );
int main()
{
bool defValue = false;
bool* status = &defValue;
CreateThread(NULL, 0, sampleThread, status, 0,NULL);
while(1)
{
//.............
defValue = true; //trigger thread
// ...
}
return 0;
}
DWORD sampleThread( LPVOID argument )
{
bool* syncPtr = reinterpret_cast<bool*>(argument);
while (1)
{
if (false == *syncPtr)
{
// do something
}
else (true = *syncPtr)
{
//do somthing else
}
}
}
答案 1 :(得分:1)
由于您已经在使用pthread
库,因此您可以使用条件变量来告诉线程有数据可供处理。有关详细信息,请查看this StackOverflow question。
答案 2 :(得分:1)
我知道您不希望无限期等待此通知,但C ++仅实现协作调度。你不能只是暂停一个线程,摆脱它的记忆,然后恢复它。
因此,您必须首先理解的是,必须处理您要发送的信号/操作的线程必须愿意这样做;换句话说,意味着必须在某个时刻明确地检查信号。
线程有多种方法来检查信号:
status
变量,它不会告诉你它改变了多少次(除非它保留了历史记录:但是我们又回到了队列中),但它允许你修改你的方式。根据您的要求,我认为队列可能是这三者中最好的想法。