首页| 论坛| 消息

标题:关于多线程同步机制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]
兄弟,我和你遇到了同样的问题不知道有没有解决

回复 发表
主题 版块