C++ 如何在C/C++;linux?

C++ 如何在C/C++;linux?,c++,c,linux,multithreading,C++,C,Linux,Multithreading,我正在寻找一种在linux上的c/c++中实现invokeOnMainThread(c#xamarin)/runOnUiThread(android)/performSelectorOnMainThread:(objective c)功能等价物的方法 本质上我需要的是一个函数,它可以从任何线程调用,我向它传递一个在主线程上执行的处理程序 我相信这将有助于我将对特定资源的访问限制在特定线程的情况下(例如,对主线程的libmysql DB访问) 实现这一点的优雅方式是什么? 在android中是如何

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

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

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

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

让您的
runnonmainthread
函数将处理程序放置在一个内存中,以便稍后由主线程执行。您的主线程需要准备定期执行它在该队列中找到的处理程序。这意味着主线程需要包含一个循环,定期检查队列中的新处理程序。通过使用或其他线程安全的信号机制,可以有效地进行定期检查

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


在C++中,a和希望线程只调用一个怎么样?在C语言中,很容易实现一些类似于简单链表和函数指针的东西。Thjis要求需要向其他线程发送某种信号——“主线程”经常等待输入消息/对象/函数指针/lambadas/任何东西。如果“主线程”确实实现了某种消息处理循环(就像在许多GUI系统中一样),那么您可以这样做。如果不是,您就不能,因为“普通”基于堆栈的函数调用/返回机制无法更改线程上下文。除了上面指出的内容,您的“主线程”已经在做什么?您正在使用某种应用程序框架吗?如果您只是想在一个特定线程上排队处理程序的能力,那么一种近乎现成的方式是使用C++ BooStudio.Asio来创建只具有一个线程的线程池。然后,您可以根据需要向其发布处理程序,它们将在所需线程上执行。感谢Joachim、Martin和Jason的建议。我目前正在查看POSIX消息队列。我将把处理程序作为消息传递,并让主线程定期检索和调用它们。