是否可以创建一个从不同类调用函数的线程?
Posted
技术标签:
【中文标题】是否可以创建一个从不同类调用函数的线程?【英文标题】:Is it possible to create a thread that calls a function from a different class? 【发布时间】:2020-06-25 03:09:45 【问题描述】:我正在开发一个 C++11 多线程 GUI 程序。
所以我有 DevTools
和 MainWindow
类。我想从MainWindow
clicked() 事件函数中调用属于DevTools
的函数。 (所有对象定义都是在类的定义上创建的)。
MainWindow
调用 Obtain_XY_Thread
时的函数:
void MainWindow::on_obtain_xy_clicked()
DevTools.Obtain_XY_Thread();
所以DevTools::Obtain_XY_Thread()
被调用,它创建了一个Obtain_XY
的线程,但我真正想要的是直接调用Obtain_XY
:
void DevTools::Obtain_XY_Thread()
thread obtain_xy(&DevTools::Obtain_XY, *this);
obtain_xy.detach();
void DevTools::Obtain_XY()
for(int i=0;i<500;i++)
//does something
这可行,但我认为这不是正确的方法。有什么方法可以调用Obtain_XY
而无需创建另一个函数?如何直接在MainWindow::on_obtain_xy_clicked()
上创建线程?
【问题讨论】:
【参考方案1】:这只是通过添加std::thread
来解决的:
void MainWindow::on_obtain_xy_clicked()
std::thread obtain_xy(&DevTools::Obtain_XY, &DevTools);
obtain_xy.detach();
【讨论】:
这里不需要class
。您已将等效代码从 DevTools::Obtain_XY_Thread
移动到 MainWindow::on_obtain_xy_clicked
如果没有 class
怎么办?我试图不使用它,但出现以下错误:“must use 'class' tag to refer to type 'thread' in this scope
”,所以我添加了它。
您还有其他对名为thread
的范围可见的内容吗?或者使用它的实际名称,std::thread
添加 std::thread
反而效果很好。我试过using namespace std;
但thread
似乎没有受到影响。这是有原因的吗?
您还有其他名为thread
的东西、函数、全局变量或类成员吗?以上是关于是否可以创建一个从不同类调用函数的线程?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Jasmine 在 AngularJS 中测试去抖函数从不调用该函数
其他信息: 线程间操作无效: 从不是创建控件“控件名”的线程访问它。