微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我的问题

这个函数应该accept()一个来自客户端的连接并返回新的文件描述符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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。