当前位置: 首页 > news >正文

网站设计 电子购物网站设计网站关于 模板

网站设计 电子购物网站设计,网站关于 模板,网站排名搜索,网站建设600元全包QEventLoop和QtConcurrent可以结合使用达到主线程ui不阻塞同步执行的效果,但是要小心避坑,查看如下代码: QEventLoop loop; QtConcurrent::run([&]() {doSomething();loop.quit(); }); loop.exec();上述写法存在两个问题: Q…

QEventLoop和QtConcurrent可以结合使用达到主线程ui不阻塞同步执行的效果,但是要小心避坑,查看如下代码:

QEventLoop loop;
QtConcurrent::run([&]()
{doSomething();loop.quit();
});
loop.exec();

上述写法存在两个问题:

  1. QtConcurrent::run()执行后线程立即开始执行,当doSomething()很快时,loop.quit()的执行时间可能早于loop.exec(),这样事件循环就再也不会退出了!
  2. 当doSomething因为某些原因crash时,如果没有导致程序崩溃,loop.quit无法被执行,事件循环同样无法退出。下面给出优化后的代码
QEventLoop loop;
QThread* pThread = QThread::create([&]()
{doSomething();
});
connect(pThread, &QThread::finished, &loop, &QEventLoop::quit);
pThread->start(); // 线程开始执行
loop.exec();

这里注意两个点:

  1. connect必须在start之前,这样即使线程执行很快,我们也能保证信号和槽已经被connect连接,槽函数会被执行
  2. connect默认第五个参数时Qt::AutoConnection,在信号发出时,由于信号发送线程和loop不在一个线程,类型被推断为Qt::QueuedConnection,所以finished信号生成的事件会放到事件队列中,在loop.exec()的循环中被处理,因此loop.exec一定会退出
http://www.yayakq.cn/news/425449/

相关文章:

  • 网站建设需求范文wordpress关闭略缩图
  • 成品ppt网站页面设计的要求
  • 阳江百姓网招聘seo专业培训机构杭州
  • 网站怎么做404营销战略
  • 郴州网站建设制作seo查询整站
  • 自己给网站做支付接口微信公众号怎么制作网页
  • 北京网站排名推广网站设计工资
  • 网站开发有关书籍大型网页设计公司
  • 企业网站制作心得50篇经典软文100字
  • 网站页面策划怎么做网络安全有名的培训学校
  • 江苏公司网站建设徐州做汽车销售的公司网站
  • 免费外贸网站模板让别人做一个网站需要多少钱
  • 公司网站建设费用记什么科目深圳罗湖互联网公司
  • wordpress外网ip访问不了seo教程正规化岚鸿
  • 静海网站开发医院网站建设标书
  • 山西网站建设公司一对一直播网站开发
  • 网站建设竞标ppt计算机学前端好还是后端好
  • 电商网站开发哪家好两学一做网站链接
  • 南宁手机建站模板中山精品网站建设行情
  • 网站模板 seo电信专线可以做网站吗
  • 网站制作公司官网江门网站制作软件
  • 木匠手做网站商丘销售网站制作
  • 有没有免费的网站软件汉中市网站建设
  • 无锡网站建设 首选无锡立威云商特效视频制作软件app
  • 织梦可以仿所有网站吗手机网站全屏
  • 官方网站手机网站建设应注意什么问题
  • 怎么用vps搭建网站丰台区网站建设公司
  • 创意logo设计生成器长沙seo服务哪个公司好
  • 温州苍南网站建设企业网站做电脑营销
  • 北京高级网站开发深圳设计公司名称