QWebSocketServer 发送延迟
Posted
技术标签:
【中文标题】QWebSocketServer 发送延迟【英文标题】:QWebSocketServer send delayed 【发布时间】:2019-03-21 10:39:20 【问题描述】:我有一个带有 QWebSocketServer 的图像处理类。当我开始处理图像时,我会发送一条 START_PROCESSING 消息。处理完成后,我会发送一条 RESULTS 消息。发生的情况是消息都在处理结束时发送,一个接一个。
在第一个测试中,我刚刚在必须调用 send 函数时调用了它们。然后我测试了一种发射/捕获信号方法,但没有进一步的线程(来自同一个主线程的发射/捕获);同样的结果我的想法是现在运行一个单独的线程来捕获发射并发送消息。这可以是一个好方法吗?还是我只是遗漏了有关消息发送“机制”的内容?
【问题讨论】:
【参考方案1】:如果您不进入事件循环,QWebSocket 将不会发送或接收任何内容。
三个选项:
-
将图像处理放在第二个线程中。
为 QWebSocket 使用第二个线程。为了避免竞争条件,请使用信号槽机制将您的数据发送到另一个线程中的 QWebSocket。
在图像处理中调用 QCoreApplication::processEvents()。
在大多数情况下,第一个是最佳选择。如果 QWebSocket 负载很重,第二个可能是个好主意。如果您必须是单线程的,第三个是一个选项。
【讨论】:
我想我选择选项 2(我在帖子中谈到的那个)。愚蠢的问题:如何将线程置于信号的“等待状态”?愚蠢的选择:让线程无限期休眠 => 关闭线程的问题! 您不必这样做。如果您不覆盖 run(),QThread 会自动启动其事件循环,如果您覆盖 run(),则在最后一行添加 exec()。您必须在线程内创建 QWebSocket 或使用 moveToThread()。以上是关于QWebSocketServer 发送延迟的主要内容,如果未能解决你的问题,请参考以下文章