Qt View 中用多线程

  在View层,我们不可避免的需要一些多线程的控制,但是,却又没有达到抽象出一个线程给程序全局使用的程度,这个线程仅仅只需要负责本view内部的操作,这个线程的生命周期一般短于view的生命周期。所以,我们需要一个简单的方式。这里主要涉及到如下几种需求:
  时间短,即使多算一遍、几遍也无所谓;
  时间很久,没必要完成前一次;
  时间不一定,但是需要排队;
 对于第一种需求,我们可以使用Future工具类,或者std::thread func并detach,避免写一个单独的thread subclass,不需要关心new/delete问题。然后让线程通知主UI线程,这里可以不使用Qt的信号槽机制,而是采用主动刷新机制,在view的事件callback函数中检查线程计算是否完成,然后由UI主线程主动读取线程保存的结果,刷新到控件上;或者也可以采用Qt的信号槽机制,先connect一个跨线程的connection,然后在view下一次事件循环中,首先更新view。因为线程对象只能在 slot 中被访问,所以,除了线程、主线程共享对象,否则难以控制该线程。

template<typename R>
bool is_ready(std::future<R> const& f)
 { return f.wait_for(std::chrono::seconds(0)) == std::future_status::ready; }

    对于第二种情况,我们就需要在view中持有这个线程,那么,我们就需要关心线程是

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值