Qt 定时器与线程

xiaobudinglala 2017-10-10 10:53:06
有个小程序,需要使用定时器定时计算一些数据,为了不阻塞主界面,所以想新建一个线程。参照了:
"How to use QThread in the right way (Part 1)" http://blog.debao.me/2013/08/how-to-use-qthread-in-the-right-way-part-1/
以及
Qt 的线程与事件循环 http://blog.csdn.net/lynfam/article/details/7081757
两篇博客,但发现我写的无法完成定时计算的功能。

optimization是我的一个界面,定时器就在这个界面中:

1.在optimization.h中定义了一个类,继承自QObject
class Worker : public QObject
{
Q_OBJECT

private slots:
void onTimeout();//这个槽就是要定时实现的功能,实现是放在了optimization.cpp中
};

2.在optimization.cpp中新建线程、定时器、worker对象,并将work对象移至次线程中,连接槽函数,并开启次线程,主要代码:
//开始进入定时器2
warningThread=new QThread;
timer2=new QTimer(this); //创建定时器2
Worker worker;//创建次进程中的对象
worker.moveToThread(warningThread);
timer2->start(5000);
QObject::connect(timer2,SIGNAL(timeout()),&worker, SLOT(onTimeout()));//定时器2在次线程中响应的槽函数,不能正常响应
QObject::connect(timer2,SIGNAL(timeout()),this, SLOT(time2outslot()));//定时器2在主线程中响应的槽函数,能够正常响应
warningThread->start();


请求各路大神帮忙看下问题在哪里?

...全文
550 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
萧洛 2017-10-12
  • 打赏
  • 举报
回复
worker要new出来,或定义为成员变量
  • 打赏
  • 举报
回复
Worker worker;是局部变量,当该函数退出后,这个变量即销毁了。将这个变量改为全局变量或者改为类的数据成员就可以了。

16,203

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧