如何中断 Windows 上的选择调用?

发布于 2024-10-21 13:24:45 字数 213 浏览 2 评论 0原文

我知道这可能是一个基本问题,但我想听听实现它的最佳方法。

那么问题来了。我有一个使用 select 调用的驱动程序线程,并且有一个 GUI 线程,有时需要通过写入同一进程中的某些文件描述符(GUI FD 或其他)来中断 select。我在 UNIX 中使用了管道,但我对 Windows 的套接字没有经验,所以我不确定应该使用哪种 FD。非常感谢示例,但​​不是必需的)。

谢谢。

I know it's probably a basic question, but I'd like to hear the best way to realize it.

So to the problem. I have a driver thread using a call to select, and I have a GUI thread that needs sometimes to interrupt select by writing to some file descriptor within the same process (GUI FD or something). I used pipe in UNIX, but I'm not experienced in sockets for Windows, so I'm not sure what kind of FD I should use. Example is greatly appreciated but not required ).

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

select() 并不是 Windows 下实现异步 I/O 的最佳选择。不幸的是,Windows 上的 select() 调用仅适用于套接字句柄,不适用于管道或 fie 句柄。

你应该看看重叠I/O< /a>.

通过在重叠结构中使用事件,您可以获得接近 select() 的行为。套接字上的任何事件都会触发一个事件,您可以使用 WaitForMultipleObjects() 等待该事件。现在,您的 GUI 线程可以通过设置使用 CreateEvent() 调用创建的特定(单独)事件来向 I/O 线程发出信号。

select() is not the best to implement asynchronous I/O under Windows. unfortunately, the select() call on windows only works with socket handles and not with pipe or fie handles.

you should have a look at overlapped I/O.

by using an event in your overlapped structure, you can have a behaviour close to select(). any event on a socket will trigger an event, which you can wait on by using WaitForMultipleObjects(). now, your GUI thread can signal the I/O thread by setting a specific (separate) event, which you create using the CreateEvent() call.

弥繁 2024-10-28 13:24:45

您可以将选择的超时设置得更短,然后如果超时则循环。或者您可以向所选的套接字发送一个简单的数据包,使其唤醒。

You could set the timeout shorter on the select and then loop round if it was a timeout. Or you could send a simple packet to the socket being selected causing it to wake up.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文