当前位置: 代码迷 >> QT开发 >> 关于QT线程的有关问题
  详细解决方案

关于QT线程的有关问题

热度:278   发布时间:2016-04-25 02:55:53.0
关于QT线程的问题
我在后台开了一个线程,针对主窗口的tableView数据更新,每1秒更新一次,程序正常,不过时间一长就会崩溃,不知道是为什么。。。        另外我在线程里面有对数据库的操作,是专门创建的一个链接
------解决思路----------------------
你改成信号/槽的模式试试。线程里发信号,然后槽函数更新
------解决思路----------------------
楼主应该是新手,大家可以多给些耐心....but,如果不结贴给分,则坚决拉黑.

-------------------------------------------------------------------------
1.QStandardItemModel不是线程安全的么?

不单这个,几乎所有的系统下的所有的界面库,都不是线程安全的.vc的mfc,Qt的Gui,mac的Cocoa,(android的叫啥?),等等等,,,,你不能在线程里直接操作界面控件..
一般做法是:你在线程里,处理怪兽的各种思想活动....最后有结果了,在主线程,让怪兽前进一步,因为怪兽是一个控件,要在窗口里面画图的...
绝对不能在线程里让怪兽控件,前进一步...
楼上有人说:"你改成信号/槽的模式试试。线程里发信号,然后槽函数更新"
就是在线程里,跑到主线程控制控件,做完后再回到这个线程...
信号,应该是和发送消息差不多的机制...
例如,你有个线程:


void ThreadProc() {
    //这些是你的怪兽控件做的思想活动,可以在线程里面干的活.
    xxx;
    xxx;

   //然后思想活动完了,不能直接在这里,操作怪兽本身,让它前时一步.
   //而是要跑到主线程里去,让怪兽前进一步.
   PostMessage();或者emit(...);//这些都是跑到主线程里干的活,它会绑定到下面的OnMonsterResult事件..

  //主线程的活干完后,可以接着让怪兽思想活动...
  xxx;
  xxx;
}

void OnMonsterResult() {
   //这里是由线程跑来的,但这里是在主线程里哟.
}



-------------------------------------------------------------------------
2.线程并不是这么容易的,还有同步,锁等各种问题,你可以找些资料先学学...
  相关解决方案