将正在运行的线程中的函数移动到新线程?

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::moveToThreadobject 与另一个线程相关联,而不是调用函数。此外,这只会影响未来的事件处理。

【讨论】:

好的,所以在类构造函数中调用它会将它与类的对象相关联,这就是为什么构造函数中的 movetothread(this) 有效? 不,请阅读zvezdi 链接的文章。 Qt 中的线程并不直观。 我已经读过了……你能回答我对你帖子的问题吗?我有一个没有信号 n 个插槽的类,就像该博客文章中的示例一样。自从构造函数使用 movetothread(this) 以来,我一直假设我们可以对函数执行类似的操作。我已阅读函数 doc.trolltech.com/4.3/qobject.html#moveToThread 的文档。 好吧,正如文章所阐明的那样,构造函数中的moveToThread(this) 很可能也不起作用。没有插槽,您将处理什么事件?没有事件,你为什么要告诉 Qt 使用哪个线程来处理事件? QThread 有两种不同的使用方式,两者都是正确的;混合是错误的。如果您需要第二个线程,请创建第二个 QThread 对象。确保它调用了 write 函数(使用两种正确方法中的任何一种)。但是如果写函数在第一个线程中,它在第二个线程中是not。函数调用是调用堆栈中不可修改的部分,是每个线程的属性。

以上是关于将正在运行的线程中的函数移动到新线程?的主要内容,如果未能解决你的问题,请参考以下文章

为给定线程切换任务

将向量传递给C++中的线程函数

如何通知多线程应用程序中的特定线程

Erlang - 将每个“erlang 进程”映射到新的内核线程

辅助线程中的 OpenGL 渲染

c++11的线程,怎么终止