标题:关于多线程同步机制QWaitCondition使用wakeAll()无效?
作者:rockyluo
日期:2013-12-11 12:12
内容:
两个线程,通信线程和主线程,通信线程收到一个网路命令后,事件触发主线程做对应动作。
QWaitCondition g_process_condition;
QMutex g_process_condition_mutex;
通信线程:
void Network::process_cmd()
{
...
QEvent *event = new QEvent();
QCoreApplication::postEvent(p_main,event);
g_process_condition_mutex.lock();
g_process_condition.wait(&g_process_condition_mutex, 3000);// 超时
g_process_condition_mutex.unlock();
}
主线程(GUI线程):
void Window::customEvent(QEvent * e)
{
...
g_process_condition_mutex.lock();
handle_expensive_operation(); // 处理耗时操作
g_process_condition.wakeAll();
g_process_condition_mutex.unlock();
}
对于customEvent里耗时操作3000ms完成时,哪怕把handle_expensive_operation();屏蔽掉,这里wakeAll()都不能唤醒通信线程,而通信线程里总是wait 3000ms后才继续进行后续动作,3000改为5000后,则wait 5000ms。
问下,wakeAll()为什么不起作用?
另外说下,程序基于arm平台运行!
#1 [awake1234 03-31 21:15]
兄弟,我和你遇到了同样的问题不知道有没有解决