如何在QThread内执行一个耗时函数?

王桑的一天 2017-07-25 04:32:23
如何在QThread内执行一个耗时函数?

我知道可以写个QThread 的 subclass , 再run() 来执行这个函数,那假如我有很多个这种耗时函数呢?岂不是要写很多个subclass?

我只想简单地把函数移到 QThread中执行,并返回结果,能够保证界面不卡,又不用改写这些函数,又不用写很多个QThread的subclass 来 run() 这些函数 。

请问应该怎么做?
...全文
528 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
jared2020 2017-08-01
  • 打赏
  • 举报
回复
qt帮助文档第一个例子,worker controller模型的,抄过去,所有线程交互都用信号槽。妥妥的。
别逗我乐 2017-07-27
  • 打赏
  • 举报
回复
引用 6 楼 wn0112 的回复:
[quote=引用 5 楼 jsjrj01 的回复:] 楼主那些耗时函数,封装到类中,然后moveToThread
对于那种带参数,有返回值的函数怎么弄?[/quote] 你按照楼上的http://blog.csdn.net/t46414704152abc/article/details/52133377 方法试下 多线程,就明白你这个应该怎么制作、 其实入口函数的参数 返回值不限制的。但这个函数一定是长时间执行或者是while循环,一般都是使用成员变量或者成员函数初始化后,然后进入循环或者耗时函数
  • 打赏
  • 举报
回复
你的带参数的东西应该不是什么难点吧,我给你我对于QThread用法的一个链接,你慢慢看看,应该会有所帮助。 链接如下:http://blog.csdn.net/t46414704152abc/article/details/52133377
jklinux 2017-07-26
  • 打赏
  • 举报
回复
引用 6 楼 wn0112 的回复:
[quote=引用 5 楼 jsjrj01 的回复:] 楼主那些耗时函数,封装到类中,然后moveToThread
对于那种带参数,有返回值的函数怎么弄?[/quote] 这些耗时函数的原型都是一样的吗?如果是一样的,可以用函数指针变量的方式来实现
王桑的一天 2017-07-26
  • 打赏
  • 举报
回复
引用 5 楼 jsjrj01 的回复:
楼主那些耗时函数,封装到类中,然后moveToThread
对于那种带参数,有返回值的函数怎么弄?
别逗我乐 2017-07-26
  • 打赏
  • 举报
回复
楼主那些耗时函数,封装到类中,然后moveToThread
王桑的一天 2017-07-26
  • 打赏
  • 举报
回复
引用 1 楼 qqwangfan 的回复:
使用moveToThread,定义一个类从QObject继承下来,然后将你所说的所有的这些耗时函数定义为这个类的槽函数,然后在外面分别使用一个信号与这些耗时槽函数相关联,再在需要用的地方将这个类的对象moveToThread到一个线程中,想运行哪个函数就发送对应的那个信号,这样不需要继承多个QThread并重写run()函数。
用moveToThread(),如果函数带参数怎么办?
王桑的一天 2017-07-25
  • 打赏
  • 举报
回复
引用 1 楼 qqwangfan 的回复:
使用moveToThread,定义一个类从QObject继承下来,然后将你所说的所有的这些耗时函数定义为这个类的槽函数,然后在外面分别使用一个信号与这些耗时槽函数相关联,再在需要用的地方将这个类的对象moveToThread到一个线程中,想运行哪个函数就发送对应的那个信号,这样不需要继承多个QThread并重写run()函数。
恩我知道你说的这种方法,函数在这个子类里, 要实例化这个QObject子类。 但我的这些函数写在一个静态类里面,不需要实例化可以直接调用。或者是未写在任何类里面的函数。 用 moveToThread() 就不可以了,这种要怎么办呢?
  • 打赏
  • 举报
回复
引用 1 楼 qqwangfan 的回复:
使用moveToThread,定义一个类从QObject继承下来,然后将你所说的所有的这些耗时函数定义为这个类的槽函数,然后在外面分别使用一个信号与这些耗时槽函数相关联,再在需要用的地方将这个类的对象moveToThread到一个线程中,想运行哪个函数就发送对应的那个信号,这样不需要继承多个QThread并重写run()函数。
还要记得发信号前start一下线程
  • 打赏
  • 举报
回复
使用moveToThread,定义一个类从QObject继承下来,然后将你所说的所有的这些耗时函数定义为这个类的槽函数,然后在外面分别使用一个信号与这些耗时槽函数相关联,再在需要用的地方将这个类的对象moveToThread到一个线程中,想运行哪个函数就发送对应的那个信号,这样不需要继承多个QThread并重写run()函数。

16,212

社区成员

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

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