【问题标题】:Moving a function in a running thread to a new thread?将正在运行的线程中的函数移动到新线程?
【发布时间】:2023-04-09 00:22:01
【问题描述】:

我在类文件中有一个读写函数。该类继承QThread类并覆盖run,没有信号和槽,它基本上在一个线程中运行数据处理函数。在它的构造函数中是方法movetothread(this)。要有两个函数来组成队列并实现多线程, 我可以在 write 函数中调用movetothread(secondthread) 吗?

void write(args)
{
 movetothread(secondthread);
}

使写入函数在单独的线程上运行。 写入功能如何以及何时停止?

【问题讨论】:

标签: c++ multithreading qt function qthread


【解决方案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。函数调用是调用堆栈中不可修改的部分,是每个线程的属性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-02
  • 1970-01-01
  • 1970-01-01
  • 2013-03-16
  • 1970-01-01
  • 2023-03-05
  • 2020-05-19
相关资源
最近更新 更多