跨线程调用a.k.a在其他线程的主/ UI线程上运行,不需要依赖项

时间:2018-05-10 09:56:27

标签: c++ c++11 game-engine nonblocking android-runonuithread

我正在使用某些c ++移动产品,但我需要我的应用主线程在后台线程上做一些繁重的工作并在主线程上运行时仍然没有任何阻塞地运行。但我意识到c ++线程api中没有runOnMainThread / runOnUIThread。我试图找出问题并发现需要依赖库,或者创建自己的线程事件队列。虽然它很好,但我想有一个可以运行的操作,但是可以运行。

2 个答案:

答案 0 :(得分:0)

经过一些研究和开发,我创建了一个名为NonBlockpp

的库

它是一个小型的c ++库,允许c ++移动应用程序能够在后台处理繁重且耗时的任务并再次返回到主线程,它已经过测试并触发了主线程事件。

它还允许保存任务并在以后激活它们,所有任务都没有相互阻塞和线程安全。

工作原理: enter image description here

enter image description here enter image description here

如果您发现任何疑问或建议,请随时提出问题,我们可以一起讨论。

答案 1 :(得分:0)

它是如何工作的:提到的库创建一个计时器,安装一个SIGALRM信号处理程序,并在发出信号时调度排队的任务。这允许在主线程上处理任务,即使它正忙。但是在信号处理程序内部调用POSIX permits only a small set of async-signal-safe functions。在信号处理程序中运行任意的с++代码违反了该限制,并使应用程序处于绝望的注定状态。