将正在运行的线程中的函数移动到新线程?
Posted
技术标签:
【中文标题】将正在运行的线程中的函数移动到新线程?【英文标题】:Moving a function in a running thread to a new thread? 【发布时间】:2011-03-07 09:25:25 【问题描述】:我在类文件中有一个读写函数。该类继承QThread
类并覆盖run,没有信号和槽,它基本上在一个线程中运行数据处理函数。在它的构造函数中是方法movetothread(this)
。要有两个函数来组成队列并实现多线程,
我可以在 write 函数中调用movetothread(secondthread)
吗?
void write(args)
movetothread(secondthread);
使写入函数在单独的线程上运行。 写入功能如何以及何时停止?
【问题讨论】:
我发现 permalink.gmane.org/gmane.comp.lib.qt.general/38137 关于 movetothread(this) 【参考方案1】:这样不行。 QObject::moveToThread
将 object 与另一个线程相关联,而不是调用函数。此外,这只会影响未来的事件处理。
【讨论】:
好的,所以在类构造函数中调用它会将它与类的对象相关联,这就是为什么构造函数中的 movetothread(this) 有效? 不,请阅读zvezdi
链接的文章。 Qt 中的线程并不直观。
我已经读过了……你能回答我对你帖子的问题吗?我有一个没有信号 n 个插槽的类,就像该博客文章中的示例一样。自从构造函数使用 movetothread(this) 以来,我一直假设我们可以对函数执行类似的操作。我已阅读函数 doc.trolltech.com/4.3/qobject.html#moveToThread 的文档。
好吧,正如文章所阐明的那样,构造函数中的moveToThread(this)
很可能也不起作用。没有插槽,您将处理什么事件?没有事件,你为什么要告诉 Qt 使用哪个线程来处理事件?
QThread
有两种不同的使用方式,两者都是正确的;混合是错误的。如果您需要第二个线程,请创建第二个 QThread 对象。确保它调用了 write 函数(使用两种正确方法中的任何一种)。但是如果写函数在第一个线程中,它在第二个线程中是not。函数调用是调用堆栈中不可修改的部分,是每个线程的属性。以上是关于将正在运行的线程中的函数移动到新线程?的主要内容,如果未能解决你的问题,请参考以下文章