来自其他线程的 main/UI 线程上的跨线程调用 a.k.a 运行,无需依赖项
Cross thread call a.k.a run on main/UI thread from other thread without dependencies needed
我正在使用一些 c++ 移动产品,但我需要我的应用程序主线程仍然 运行ning 在后台线程上执行一些繁重的工作时没有任何阻塞并且 运行 回到主线程线。但是我意识到c++线程api中没有runOnMainThread/runOnUIThread。我试图找出问题所在,发现需要依赖库,或者创建自己的线程事件队列。虽然它很好,但我想有一个可以 运行OnUIThread.
的行为
经过一些研究和开发,我创建了一个名为 NonBlockpp
的库
它是一个小的c++库,让c++移动应用程序能够在后台处理繁重且耗时的任务并再次返回主线程,已经过测试并触发主线程事件。
它还允许保存任务并在以后触发它们,所有任务都没有相互阻塞和线程安全。
工作原理:
如果您有任何疑问或建议,请随时提出问题,我们可以一起讨论。
它是如何工作的:提到的库创建了一个计时器,安装了一个 SIGALRM
信号处理程序,并在信号被触发时分派排队的任务。这允许在主线程上处理任务,即使它很忙。但是 POSIX permits only a small set of async-signal-safe functions 在信号处理程序内部调用。 运行 信号处理程序中的任意 с++ 代码违反了该限制并使应用程序处于无可救药的注定状态。
由于信号处理程序使用起来可能不安全,项目已将信号从信号更正为 pollEvent。
请看新改的
我正在使用一些 c++ 移动产品,但我需要我的应用程序主线程仍然 运行ning 在后台线程上执行一些繁重的工作时没有任何阻塞并且 运行 回到主线程线。但是我意识到c++线程api中没有runOnMainThread/runOnUIThread。我试图找出问题所在,发现需要依赖库,或者创建自己的线程事件队列。虽然它很好,但我想有一个可以 运行OnUIThread.
的行为经过一些研究和开发,我创建了一个名为 NonBlockpp
的库它是一个小的c++库,让c++移动应用程序能够在后台处理繁重且耗时的任务并再次返回主线程,已经过测试并触发主线程事件。
它还允许保存任务并在以后触发它们,所有任务都没有相互阻塞和线程安全。
工作原理:
如果您有任何疑问或建议,请随时提出问题,我们可以一起讨论。
它是如何工作的:提到的库创建了一个计时器,安装了一个 SIGALRM
信号处理程序,并在信号被触发时分派排队的任务。这允许在主线程上处理任务,即使它很忙。但是 POSIX permits only a small set of async-signal-safe functions 在信号处理程序内部调用。 运行 信号处理程序中的任意 с++ 代码违反了该限制并使应用程序处于无可救药的注定状态。
由于信号处理程序使用起来可能不安全,项目已将信号从信号更正为 pollEvent。
请看新改的