rockyluo |
2013-12-11 12:12 |
关于多线程同步机制QWaitCondition使用wakeAll()无效?
两个线程,通信线程和主线程,通信线程收到一个网路命令后,事件触发主线程做对应动作。
- 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平台运行!
|
|