Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 如何使我的WaitForBytesWrite呼叫无阻塞?_Qt_Qt4 - Fatal编程技术网

Qt 如何使我的WaitForBytesWrite呼叫无阻塞?

Qt 如何使我的WaitForBytesWrite呼叫无阻塞?,qt,qt4,Qt,Qt4,我有这个功能: bool TCPClient::sendPacket(Protocol::Packet &packet) { if(this->tcpSocket->state() == QAbstractSocket::ConnectedState) { std::cout << "writing ..." << std::endl; std::cout << sizeof(BabelPacket) + packe

我有这个功能:

bool TCPClient::sendPacket(Protocol::Packet &packet)
{
  if(this->tcpSocket->state() == QAbstractSocket::ConnectedState)
  {
    std::cout << "writing ..." << std::endl;
    std::cout << sizeof(BabelPacket) + packet.dataLength << std::endl;
    this->tcpSocket->write((const char *)&packet, sizeof(Protocol::BabelPacket) + packet.dataLength);
    return this->tcpSocket->waitForBytesWritten(-1);
  }
  else
  {
    std::cout << "socket close" << std::endl;
    return false;
  }
}
bool-TCPClient::sendPacket(协议::数据包和数据包)
{
if(this->tcpSocket->state()==QAbstractSocket::ConnectedState)
{
std::cout waitforbytes写入(-1);
}
其他的
{

std::无法侦听
BytesWrite()
信号。如果不想阻止GUI,则不在GUI线程上运行阻止操作。您可以创建另一个QThread,并使用
QObject::moveToThread(…)
method@MrEricSir你是什么意思?`我连接了(这个->tcpSocket,信号(readyRead()),这个,插槽(readMessage());`但是当服务器向我发送数据包时,readMessage函数不起作用triggered@Rinold因此,每当我需要执行WaitForBytesWrite时,我都需要执行moveToThread?@DimitriDanilov,您应该将对象移动到另一个线程一次,您可以在这里找到。其想法是将长时间运行的操作与GUI线程分离。