从辅助线程使用主线程的调用方法

问题描述:

我已经调用了使用辅助线程的方法。 从方法内部我需要从主线程调用一个方法。从辅助线程使用主线程的调用方法

这里是结构

void main_thread_method() 
{ 

} 

void secondary_thread_method() 
{ 

//do something here 

    call main_thread_method() here using main thread 

} 

pthread thread1; 

pthread_create (&thread1, NULL, (void *) &secondary_thread_method, NULL); 

pthread_join(thread1); 
+0

由于一个线程中的数据可以从同一进程中的另一个线程访问,所以我没有看到问题所在?你想将控制转移到另一个线程进行一些计算吗?在这种情况下,检查信号和条件变量。 –

+0

@All:在Objective C/C++中,有一个API可以在辅助线程中使用主线程调用方法。实际上,我需要调用gtkWindow对象,该对象只能从主线程调用。 – boom

如果你的主线程运行一个消息泵,你可以发布一条消息不知何故执行功能收到您的邮件时。

否则有一个简单的队列(当然适当的锁定)。将足够的数据添加到队列中,以便可以调用main_thread_method。 (参数等)。定期轮询简单队列以查找主线程中的新消息并处理它们。

+0

+1有比轮询更好的方法,但基本上这是正确的技术。基本上,主线不能坐在旁边等待加入,它必须积极倾听。 –

+0

用于PostMessage到主线程窗口的+1。我通常使用一个在启动时使用RegisterClass()和CreateWindow()为主线程发布的所有帖子创建的不可见窗口。我将wParam中的目标窗口实例和lParam中的参数进行传输。然后WndProc调用一个消息处理程序,当它获得张贴的消息时传递给它的任何窗口。 'lParam'参数可以是任何东西,通常我传递一个包含'command'枚举的类(以及其他东西,例如数据缓冲区),通过交换机可以调用主线程上的任意数量的方法更新控件等 –

+0

@Martin我认为op正在寻找linux解决方案 –

我知道你想从辅助线程调用一个必须在主线程中运行的方法。这不可能。调用的函数在同一个线程中运行。您可以使用任何种类的多线程通信方法,如信号量,消息池,条件等。