【发布时间】:2014-07-16 09:18:22
【问题描述】:
我有一个功能。在我的函数中有一个 c++ 线程和一个 Qtimer。通过 c++ 线程我接收 ARP 回复数据包并通过 QTimer 我发送 ARP 请求数据包。
简化结构:
int foo()
{
... some codes ...
QTimer::singleShot(1000, this, SLOT(beginSending()));
std::thread tCapture(Capture);
tCapture.join();
return 0;
}
void Capture()
{
while ( ! finishCapturing )
{
do sth
}
}
在tCapture 线程中,我有一个消耗所有 CPU 的 while 循环,并且 Qtimer 不起作用!
我使用.join(),因为我想等待线程完成。
当我在 Qtimer 插槽中设置finishCapturing 标志时,线程将完成。
上面的代码不能正常工作,因为c++线程消耗了所有的CPU!
有什么问题?
非常感谢。 亚阿里。
【问题讨论】:
-
可能会尝试在此期间进入睡眠状态,以便让处理器执行其他操作。
-
我也建议使用 .run(),并在执行结束时等待 tCapture 发出的信号。
-
你怎么知道线程消耗了所有的CPU?
-
我使用了 Sleep(1000) 但不起作用!
-
"我使用
.join(),因为我想等待线程完成。" - 在您等待时不会发生任何其他事情,因此没有任何事情发生也就不足为奇了。让线程继续运行,并在捕获完成后加入它。
标签: c++ multithreading qt cpu stdthread