两个
线程,通信线程和主线程,通信线程收到一个网路命令后,
事件触发主线程做对应动作。
- 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平台运行!