当前位置: 代码迷 >> QT开发 >> 子线程需要UI交互有关问题
  详细解决方案

子线程需要UI交互有关问题

热度:99   发布时间:2016-04-25 03:28:57.0
子线程需要UI交互问题
我用Qt开发一个应用,子线程中有一个需要用户UI交互,提示用户是否继续次操作。
Qt不是线程安全,所以我用信号。请问有没有阻塞的。我现在做法很猥琐,用的一个变量,等UI选择后再将这个变量置为,让子线程继续运行。简单的代码如下:

bool bRun = false;
void ThreadFun()///子线程
{
    ........//代码
    bRun = false;
    connect(this,SIGNAL(UserChouse),uiThread,SLOT(UIFun));
    while(!bRun){}///////如果UI已经选择则继续
    .........//执行后面的代码
}

void Dlg::UIFun()////UI线程
{
   ......//代码
   bRun = true;
}

------解决方案--------------------
都是这样弄的吧,想玩专业点用QSemaphore或者QMutex来控制。
------解决方案--------------------
QWaitCondition好像更适合一些。
------解决方案--------------------
用QSemaphore的 acquire(int)函数,获取不到时是阻塞的
------解决方案--------------------
俺也是这么玩的呢
------解决方案--------------------
类似于MFC的SendMessage的是SendEvent;PostMessage是PostEvent
------解决方案--------------------
Qdialog 可以设置为窗口阻塞windowmodel,和应用阻塞applicationmodel,后者不知道没不能满足你的需求
  相关解决方案