C++ 如何确保插槽在特定线程中执行';什么是背景?

C++ 如何确保插槽在特定线程中执行';什么是背景?,c++,qt,C++,Qt,假设我有一个发出信号X的线程a,还有一个线程B,它有信号X连接到的插槽Y。如果插槽Y是在线程A的上下文中执行的,我还应该担心吗?或者它会像我假设的那样在线程B的上下文中执行吗?是的,您应该关心。这是QObject::connect中第5个参数的用途 如果您这样做: connect(A,X,B,Y,Qt::DirectConnection); connect(A,X,B,Y,Qt::QueuedConnection); 然后A将从其自己的线程调用Y()。但是,如果您这样做: connect(A

假设我有一个发出信号X的线程a,还有一个线程B,它有信号X连接到的插槽Y。如果插槽Y是在线程A的上下文中执行的,我还应该担心吗?或者它会像我假设的那样在线程B的上下文中执行吗?

是的,您应该关心。这是
QObject::connect
中第5个参数的用途

如果您这样做:

connect(A,X,B,Y,Qt::DirectConnection);
connect(A,X,B,Y,Qt::QueuedConnection);
然后
A
将从其自己的线程调用
Y()
。但是,如果您这样做:

connect(A,X,B,Y,Qt::DirectConnection);
connect(A,X,B,Y,Qt::QueuedConnection);
A
Y()
添加到
B
的事件队列中,并且
B
稍后将在其自己的线程中执行
Y()


更多信息。

是的,你应该关心。这是
QObject::connect
中第5个参数的用途

如果您这样做:

connect(A,X,B,Y,Qt::DirectConnection);
connect(A,X,B,Y,Qt::QueuedConnection);
然后
A
将从其自己的线程调用
Y()
。但是,如果您这样做:

connect(A,X,B,Y,Qt::DirectConnection);
connect(A,X,B,Y,Qt::QueuedConnection);
A
Y()
添加到
B
的事件队列中,并且
B
稍后将在其自己的线程中执行
Y()


更多信息。

您可以尝试一下。将告诉您在我的项目中使用boost::asio的线程,然后在信号处理程序中,
调度
到正确的
io\u服务
。执行线程是确定性的。您可以尝试一下。将告诉您在我的项目中使用boost::asio的线程,然后在信号处理程序中,
调度
到正确的
io\u服务
。然后执行线程是确定性的。重要的是要注意,如果省略最后一个参数,如果A和B在两个不同的线程中,则将使用第二个版本,如果它们在同一个线程中,则将使用第一个版本,因此我不必在connect()中使用第五个参数,它将自动选择正确的?@fatma.ekici Yes。然而,我更愿意在有疑问时明确地提到它,因为op称为线程A和线程B并不十分清楚,但在您的示例中将它们用作QObject。插槽的所有者类实例对于QThread对象不是必需的,实际上也不应该是:重要的是要注意,如果省略最后一个参数,如果A和B在两个不同的线程中,则将使用第二个版本,如果它们在同一个线程中,则将使用第一个版本,因此我不必在connect()中使用第五个参数,它将自动选择正确的?@fatma.ekici Yes。然而,我更愿意在有疑问时明确地提到它,因为op称为线程A和线程B并不十分清楚,但在您的示例中将它们用作QObject。插槽的所有者类实例不是QThread对象所必需的,实际上也不应该是: