问题标签 [gloox]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
374 浏览

win32gui - 如何在 win32 gui 应用程序中使用另一个事件循环

我是 win32 api 编程新手,我正在使用 win32 api 和 gloox xmpp 库为 windows 平台编写 xmpp 客户端。gloox 有自己的事件循环,而 windows GUI 也有消息循环。我不太清楚如何一起使用这两个循环。

来自 gloox 文档:

阻塞与非阻塞连接对于某些类型的机器人,阻塞连接(默认行为)是理想的。机器人所做的只是对来自服务器的事件做出反应。然而,对于最终用户客户端或任何带有 GUI 的东西来说,这远非完美。

在这些情况下,可以使用非阻塞连接。如果调用 ClientBase::connect( false ),则函数在连接建立后立即返回。然后程序员有责任开始从套接字接收数据。

最简单的方法是定期调用 ClientBase::recv() 并使用所需的超时(以微秒为单位)作为参数。默认值 -1 表示调用阻塞,直到收到任何数据,然后自动解析。

窗口消息循环:

窗口过程:

gloox 阻塞连接

gloox 非阻塞连接

我不太清楚我该怎么做

以所需超时(以微秒为单位)作为参数定期调用 ClientBase::recv()

带计时器?还是多线程编程?还是有更好的解决方案?

任何建议表示赞赏

谢谢