查看完整版本: [-- 关于多线程同步机制QWaitCondition使用wakeAll()无效? --]

QTCN开发网 -> Qt基础编程 -> 关于多线程同步机制QWaitCondition使用wakeAll()无效? [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

rockyluo 2013-12-11 12:12

关于多线程同步机制QWaitCondition使用wakeAll()无效?

两个线程,通信线程和主线程,通信线程收到一个网路命令后,事件触发主线程做对应动作。


  1. 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平台运行!





awake1234 2020-03-31 21:15
兄弟,我和你遇到了同样的问题不知道有没有解决


查看完整版本: [-- 关于多线程同步机制QWaitCondition使用wakeAll()无效? --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled