【发布时间】:2017-05-30 10:15:48
【问题描述】:
我正在开发一个视觉应用程序,它有两种模式:
1) 参数设置
2) 自动
问题出在 2) 中,当我的应用程序通过 TCP/IP 等待信号时。程序在调用accept()-methode 时冻结。我想在 GUI 上提供更改模式的可能性。所以如果模式正在改变,它是由另一个信号(message_queue)提供的。所以我想中断接受状态。
是否有简单的可能性来中断接受?
std::cout << "TCPIP " << std::endl;
client = accept(slisten, (struct sockaddr*)&clientinfo, &clientinfolen);
if (client != SOCKET_ERROR)
cout << "client accepted: " << inet_ntoa(clientinfo.sin_addr) << ":"
<< ntohs(clientinfo.sin_port) << endl;
//receive the message from client
//recv returns the number of bytes received!!
//buf contains the data received
int rec = recv(client, buf, sizeof(buf), 0);
cout << "Message: " << rec << " bytes and the message " << buf << endl;
我读到了select(),但我不知道如何使用它。谁能给我一个提示,例如如何在我的代码中实现select()?
谢谢。
最好的问候,
T
【问题讨论】:
-
多线程(将渲染与实际进程分开或让线程渲染窗口的不同部分)不是可接受的解决方案?
-
问题是,我无法离开由accept()引起的冻结状态。我必须中断它以再次检查模式。
-
GUI 和网络 io 之间的交互可能取决于操作系统。什么是你的,或者你真的需要一种完全便携的方式(可能更难......)?
标签: c++