在 C++ 中显示 Qt GUI 时在后台接受套接字连接

Accept socket connection in background while displaying Qt GUI in C++

我的问题

此函数应该accept() 来自客户端的连接和return 新文件描述符newfd。问题是等待连接会冻结 Qt GUI。

int tcp_connect(int sockfd)
{
    struct sockaddr_storage client_addr;
    socklen_t sin_size = sizeof client_addr;
    int newfd = accept(sockfd, (struct sockaddr *)&client_addr, &sin_size);

    return newfd;
}

我的尝试

我已经尝试使用 std::async 异步执行函数,但用户界面仍然冻结,直到接受来自客户端的连接。

std::future<int> future (std::async(tcp_connect, sockfd));
int newfd = future.get();

我也试过使用 QTConcurrent::run,但结果相同。

QFuture<int> future = QtConcurrent::run(tcp_connect, sockfd);
int newfd = future.result();

如果需要更多信息来回答问题,请告诉我。

Qt QTcpSocket 带有异步信号槽 api,您可以使用它。或者你可以使用 QThread.