如何检查Qt中的信号状态?

时间:2015-06-19 20:04:03

标签: c++ multithreading qt

以下Win32代码在不等待的情况下检查事件是否已发出信号。

handle = CreateEvent(NULL, true, false, NULL);

bool signaled = WaitForSingleObjectEx(handle, 0, true) != WAIT_TIMEOUT;

它在Qt中的等价物是什么?

我想要完成的任务:

我有两个线程:侦听器和发送器(发送命令)。当用户单击按钮时,操作会发送一系列命令,但我需要在发送以下命令之前验证是否收到第一个命令的响应(并检查它)。我以为我可以在互斥锁或其他东西周围同步它们......接收器会在接收到数据时发出互斥信号并发送,而不是等待它。我正在寻找Qt方便的方法来实现这一目标。我正在使用QTcpServer派生类及其listen()方法来侦听端口。

2 个答案:

答案 0 :(得分:0)

没有,因为信号通常是无国籍的概念。在Qt中,信号只是一个函数调用。没有信号被“发信号”的概念。 “正在发出信号”的信号只是其方法调用尚未返回的信号 - 请回想一下,信号只是带有一些moc生成代码的方法。

答案 1 :(得分:0)

如果你在谈论等效的信号,我猜这里没有这样的。但你可以自己实现它:

class A {
public:
    A() {
        QMetaObject::Connection setEmmitedConnection = connect(this, &A::signal, [&setEmmitedConnection]() {
        isSignalEmmited = true;
        disconnect(setEmmitedConnection);
    });

signals:
    void signal();

private:
    bool isSignalEmmited = false;
};

但我认为你不需要这样的东西。