如何在C/C++linux中实现invokeOnMainThread()这样的函数

How to implement a function like invokeOnMainThread() in C/C++ linux?

本文关键字:函数 invokeOnMainThread 实现 C++linux      更新时间:2023-10-16

我正在寻找一种方法,在linux上的c/c++中实现invokeOnMainThread(c#xamarin)/runOnUiThread(android)/performSelectOnMainThread:(objectiveC)的功能等价物。

本质上,我需要的是一个函数,它可以从任何线程调用,我将在主线程上执行的处理程序传递给它。

我相信这在我想将对特定资源的访问限制在特定线程的情况下会很有帮助(例如,libmysql DB对主线程的访问)。

实现这一点的优雅方式是什么?它是如何在android中完成的?

runOnMainThread函数将处理程序放在线程安全队列中,以便稍后由主线程执行,这很简单。您的主线程需要准备好定期执行它在该队列中找到的处理程序。这意味着主线程需要包含一个循环,该循环定期检查队列中的新处理程序。这种周期性检查可以通过使用信号量或其他线程安全的信令机制而变得有效。

以下是一些关于线程安全队列的SO问题:

  • C++11线程安全队列
  • 对于生产者和多个消费者,std::队列线程安全吗