소켓의 특정 메시지가 수신 될 때까지 실행을 일시 중지합니까?
-
02-01-2020 - |
문제
소켓이 특정 메시지를받을 때까지 기능을 일시 중지 할 수있는 방법이 있습니까?신호 + qEventLoop을 사용하여 기다리지 않으려면 신호를 기다릴 수 있으므로 신호가 방출 된 데이터를 가져올 수있는 방법이 없습니다.
해결책
다음 신호에 연결할 수 있습니다.
다음 기본적으로 데이터를 읽을 수 있으며 찾고있는 것이면 처음에 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 간편한이지만 솔루션을 요구하는 것 이외의 많은 노력을 보지 못했기 때문에 시작해야합니다.
제휴하지 않습니다 StackOverflow