• 4785阅读
  • 1回复

关于多线程同步机制QWaitCondition使用wakeAll()无效? [复制链接]

上一主题 下一主题
离线rockyluo
 

只看楼主 倒序阅读 楼主  发表于: 2013-12-11
两个线程,通信线程和主线程,通信线程收到一个网路命令后,事件触发主线程做对应动作。


  1. QWaitCondition g_process_condition;
  2. QMutex g_process_condition_mutex;
  3. 通信线程:
  4. void Network::process_cmd()
  5. {
  6.    ...
  7.    QEvent *event = new QEvent();
  8.    QCoreApplication::postEvent(p_main,  event);
  9.    g_process_condition_mutex.lock();
  10.    g_process_condition.wait(&g_process_condition_mutex, 3000);    // 超时
  11.    g_process_condition_mutex.unlock();
  12. }
  13. 主线程(GUI线程):
  14. void Window::customEvent(QEvent * e)
  15. {
  16.    ...
  17.    g_process_condition_mutex.lock();
  18.    handle_expensive_operation();         // 处理耗时操作
  19.    g_process_condition.wakeAll();
  20.    g_process_condition_mutex.unlock();
  21. }



对于customEvent里耗时操作3000ms完成时,哪怕把handle_expensive_operation();屏蔽掉,这里wakeAll()都不能唤醒通信线程,而通信线程里总是wait 3000ms后才继续进行后续动作,3000改为5000后,则wait 5000ms。


问下,wakeAll()为什么不起作用?

另外说下,程序基于arm平台运行!




                                                                                                              我们要团结一心,秉承Linux的开源精神,共享Qt问题的解决方法!
离线awake1234

只看该作者 1楼 发表于: 2020-03-31
兄弟,我和你遇到了同样的问题不知道有没有解决
快速回复
限100 字节
 
上一个 下一个