问题描述
我们必须使用事件驱动编程来编写服务器和客户端 - 我们使用 select(2)
从标准输入和套接字读取.我正在使用 SDL2 和 SDL2_TTF 库为客户端制作接口.问题是我不知道如何让 select(2)
为 SDL 文本输入事件工作,所以我无法将客户端连接到我的界面.我该怎么做?是否有文件描述符可用于在 SDL 窗口上查看我的输入?
We have to program a server and a client using event-driven programming - we use select(2)
to read from stdin and sockets. I'm making an interface for the client using the SDL2 and SDL2_TTF libraries. The problem is I don't know how to make select(2)
work for SDL text input events, so I cannot connect the client to my interface. How should I do that? Is there a file descriptor I can use to watch my input on the SDL window?
我忘了提:我们必须使用select(2)
推荐答案
没有.您能做的最好的事情是通过 SDL_GetWindowWMInfo()
&SDL_SysWMinfo
结构.
Nope. Best you can do is get some platform-specific window handles via SDL_GetWindowWMInfo()
& the SDL_SysWMinfo
struct.
您或许可以在 x11.display 上使用
和 ConnectionNumber()
select(2)
,但这确实是特定于 X11 的.
You might be able to use ConnectionNumber()
on x11.display
and select(2)
on it but that's really X11-specific.
我该怎么做?
让主/GUI/SDL 线程通过本地套接字上的 write(2)
将消息发送到您的网络线程,网络线程也select(2)
上.对于网络线程到主线程的通信,您可以使用 SDL_PushEvent()
和唤醒SDL_WaitEvent()
的自定义事件.
Have the main/GUI/SDL thread send messages to your networking thread via write(2)
on a local socket which the networking thread also select(2)
s on. For network thread to main thread communication you can use SDL_PushEvent()
with a custom event to wake up SDL_WaitEvent()
.
这篇关于是否可以使用 select(2) 来监视 SDL 文本输入事件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!