在 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
.
我的问题
此函数应该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
.