跨线程调用a.k.a从其他线程在主/UI线程上运行,不需要依赖项 我在一些C++移动产品上,但是我需要我的应用程序主线程在后台线程上做一些繁重的工作,并且在主线程上运行时,仍然没有任何阻塞。但是我意识到在C++线程API中没有Runon主线程/ RunOnuiT线。我试图找出问题所在,发现需要依赖库,或者创建自己的线程事件队列。虽然它很好,但我想有一种行为可以让人阅读。

跨线程调用a.k.a从其他线程在主/UI线程上运行,不需要依赖项 我在一些C++移动产品上,但是我需要我的应用程序主线程在后台线程上做一些繁重的工作,并且在主线程上运行时,仍然没有任何阻塞。但是我意识到在C++线程API中没有Runon主线程/ RunOnuiT线。我试图找出问题所在,发现需要依赖库,或者创建自己的线程事件队列。虽然它很好,但我想有一种行为可以让人阅读。,c++,c++11,game-engine,nonblocking,android-runonuithread,C++,C++11,Game Engine,Nonblocking,Android Runonuithread,经过一些研究和开发,我创建了一个名为 是一个小型C++库,允许C++移动应用程序能够在后台重处理主线程的繁重且耗时的任务,并对主线程事件进行测试和启动。 它还允许保存任务并在以后激发它们,所有任务都没有相互阻塞和线程安全 工作原理: 如果您发现任何疑问或建议,请毫不犹豫地提出问题,我们可以一起讨论。它的工作原理:上述库创建计时器,安装SIGALRM信号处理程序,并在触发信号时分派排队的任务。这允许在主线程上处理任务,即使它很忙。但是,它必须在信号处理程序内部调用。在信号处理程序内部运行任意

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

是一个小型C++库,允许C++移动应用程序能够在后台重处理主线程的繁重且耗时的任务,并对主线程事件进行测试和启动。 它还允许保存任务并在以后激发它们,所有任务都没有相互阻塞和线程安全

工作原理:


如果您发现任何疑问或建议,请毫不犹豫地提出问题,我们可以一起讨论。

它的工作原理:上述库创建计时器,安装SIGALRM信号处理程序,并在触发信号时分派排队的任务。这允许在主线程上处理任务,即使它很忙。但是,它必须在信号处理程序内部调用。在信号处理程序内部运行任意的С++代码违反了该限制,并使应用程序处于无望的失败状态。

由于信号处理程序的使用可能不安全,项目已从信号纠正为事件

请看一下新换的


在写上述内容之前,您是否回顾了std::future等?此外,代码的图片几乎无法使用。它是如何工作的部分不知何故根本没有解释它是如何工作的。为什么会有函数出现在这个线程::sleep\u for下面的调用堆栈中?让工作线程回调到java代码中不是更好的方法吗;这样,您就可以在上下文中调用runnonmainthread来处理结果;与其去投票看任务是否完成了?更好的地方应该是打开它。@Richard,future正在阻止主线程,如果你总是在你做的每一项背景任务中循环isReady,这可能需要很多努力——有点迂腐——但不是真正的问题答案;你是说信号处理器的作用域有一些限制吗?请给我一些样品。@ OktHeta可以找到我在链接的页面上从信号处理程序中安全调用的函数列表。@ VTT到目前为止,我已经用我的C++移动程序测试了HTTP,它没有问题,我也运行了STRSSS测试。我只是不明白你们所说的信号处理程序中的限制,因为我的库是SIGALRM函数链,每次只允许一个,它有原子locked@Oktaheta好的,您在我链接的页面上查看了异步信号安全函数列表了吗?调用不在该列表中的任何内容都是不安全的。如果没有依赖项,则无法实现UI。您使用的任何库都有一种方法来调用UI线程上的代码。这是必然的,因为UI从来都不是线程安全的。如果它确实不可用,那么就用一个更好的。通过描述如何实现用户界面(命名操作系统或库),可以得到一个对您有实际帮助的答案。嗨,汉斯,我已经完成了一个名为的项目,它能够安全地向主线程发送信号,每次一个。重复@你是java,我的LIB是C++,我建议你试着用它。如果你面临任何错误。不要犹豫,一起讨论吧