glib主循环pthread太忙了?

时间:2019-05-30 22:38:26

标签: pthreads webrtc glib libnice

多线程C服务器软件可以这样工作:

1个线程是rest API(链接到libmicrohttpd)
1个线程建立STUN连接(使用libnice)
1个线程负责ssl握手(openssl)
1个线程正在收集数据(在循环缓冲区中)
1个线程正在从循环缓冲区分发此数据

客户端(javascript)在Linux,Windows,MacOS或iO的浏览器(Firefox,Chrome或Safari)中运行。

iOS中的Safari不会放弃本地的ice候选对象,因此我已激活了mDNS候选对象的高级选项,并且效果很好。

问题是,一旦我以“连接”状态在cb_component_state_changed中被回调,即使未建立连接(在stun连接线程中),我也开始在cb_nice_received中接收数据。

我开始反复接收到客户端问候,并且其余的API线程以某种方式变得不活动,因为主gloop正在密集运行,并且我看不到浏览器发送的ice候选对象,因此无法向其提供代理,因此眩晕连接未完成。我可以在Wireshark中看到它,但是没有调用libmicrohttpd回调,所以我从不完成我的ice连接

基本上我的问题有两个:

即使目前没有建立连接,我如何接收cb_nice_received中的数据。

我该如何减慢主gloop的速度,以便其余API线程可以稍微说一遍...

该软件可以在Linux,Windows和Mac OS上的Firefox和Chrome,Mac OS上的Safari上完美运行,但问题会在Safari iOS中显示。

谢谢您的帮助;-)

我已经尝试过在cb_nice_received中置入一个休眠状态,以便它可以让其他线程(包括REST API)一无所获

预期结果是线程之间的平衡,因此gloop不会通过阻止其他线程运行来接管整个程序

0 个答案:

没有答案