Min*_*ode 5 c++ qt multithreading qthread qt5
我在Qt5Application中有2个线程:
线程A:包含一堆QObject派生类对象
线程B:此Thread中的worker具有指向A中对象的所有指针
线程A有时可能非常繁忙,而线程B只在那里委托信号并管理其他一些东西.它从不写入任何这些对象,但我需要检查一些从A中的对象返回布尔值的getter函数.
in ThreadB:
if (objInThrA->isFinished()) { ... }
Run Code Online (Sandbox Code Playgroud)
isFinished()返回一个布尔值.
如果线程A真的忙于函数并且我在线程B中调用这些isFinished函数,那么我的线程B是否会停止,直到线程A完成它的工作,或者这会工作吗?
您永远不应该访问另一个线程中的对象的成员或直接调用该对象的函数。唯一安全的方法是通过信号/槽机制访问它们。您可以输入一个信号ThreadB并将其连接到一个ThreadA返回值的槽:
connect(objInThrB, SIGNAL(getFinished()), objInThrA, SLOT(isFinished()), Qt::BlockingQueuedConnection);
Run Code Online (Sandbox Code Playgroud)
这样,当您在线程 B 中发出信号时,如下所示:
bool ret = getFinished();
Run Code Online (Sandbox Code Playgroud)
当控制权返回到线程 A 的事件循环时,线程 A 中的槽将被调用,并且值将被返回。线程 B 等待槽被调用,这是因为连接类型是BlockingQueuedConnection。因此请注意不要使用这种阻塞连接来阻塞应用程序主线程。