문제

소켓이 특정 메시지를받을 때까지 기능을 일시 중지 할 수있는 방법이 있습니까?신호 + qEventLoop을 사용하여 기다리지 않으려면 신호를 기다릴 수 있으므로 신호가 방출 된 데이터를 가져올 수있는 방법이 없습니다.

도움이 되었습니까?

해결책

다음 신호에 연결할 수 있습니다.

void qiodevice :: ReadyRead () [신호]

다음 기본적으로 데이터를 읽을 수 있으며 찾고있는 것이면 처음에 FALSE 인 BOOleAN 변수를 TRUE로 설정할 수 있습니다.변수가 true 일 때만 기능이 실행됩니다.

전용 스레드가없는 함수가 너무 많지 않고 일시 중지 된 기능이 너무 많지 않은지 확인하십시오.

그래서, 이것은 당신의 과제를 해결하는 한 가지 방법이 될 것입니다 :

MySocketManager::MySocketManager(QObject *parent): QObject(parent)
{
    ...
    connect(m_mySocket, SIGNAL(readyRead()), SLOT(handleReadyRead()));
    ...
}

void MySocketManager::handleReadyRead()
{
    if (m_mySocket.readAll() == "myMessage")
        continue = true;
}

...

void myFunction()
{
    ...
    continue = false;
    qDebug() << "Pause";
    while (!continue) { ... }
    qDebug() << "Continue";
    ...
}
.

이 문제의 TAD 간편한이지만 솔루션을 요구하는 것 이외의 많은 노력을 보지 못했기 때문에 시작해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top