2013-05-25 16 views
2

我记得有一种方法可以做到这一点,类似于unix信号,但没有如此广泛地使用。但不记得这个词。没有使用事件/互斥锁:线程只是在随机位置中断,函数被调用,并且当它返回时,线程继续。如何在另一个线程的上下文中调用一个函数?

+0

你确定它是另一个线程上下文中的函数吗? Windows可以很容易地在另一个进程中运行代码,但在另一个线程中是我从未见过的东西。 – JimR

+0

请不要在标题中加入标签信息。这里的标记系统非常擅长对事物进行分类,并且不需要帮助。 :-)请参阅[应该在其标题中是否包含“标签”?](http://meta.stackexchange.com/q/19190/172661)。谢谢。 –

回答

1

你可以搜索RtlRemoteCall,但它是一个没有记录的例程。 Windows中的APC在语义上类似于Unix信号,但APC要求目标线程处于可警告状态才能交付,但不能保证始终满足此条件。

+0

刚刚尝试过RtlRemoteCall。显然,如果一个线程处于不可警告的等待状态(同步ReadFile),则不会调用该函数。 – basin

2

Windows有Asynchronous Procedure Calls它可以在特定的上下文中调用函数线。 APC不会在随机的地方中断一个线程(这很危险 - 线程可能正在写入文件或获取锁或处于内核模式中)。相反,当调用线程通过调用特定函数进入可变等待时,将调度APC(请参阅APC文档)。

如果您需要调用的代码在一个特定的线程的原因是因为你与用户界面交互,这将是更直接的sendpost窗口消息要更新的窗口句柄。窗口消息总是在创建窗口的线程中处理。

+0

+1,yup - 用于GUI的PostMessage/SendMessage,否则带有可警告等待的APC。 –

相关问题