Winapi 如何在另一个线程的上下文中调用函数?

Winapi 如何在另一个线程的上下文中调用函数?,winapi,Winapi,我记得有一种方法可以做到这一点,类似于unix信号,但没有得到广泛应用。但是我记不起这个词了。没有使用事件/互斥体:线程只是在随机位置被中断,函数被调用,当它返回时,线程继续。您可以搜索RtlRemoteCall,但这是一个未记录的例程。Windows中的APC在语义上类似于Unix信号,但是APC要求目标线程处于可警报状态才能交付,不能保证始终满足此条件,Windows可以在特定线程的上下文中调用函数。APC不只是在一个随机位置中断线程(这将是危险的-线程可能在写入文件或获得锁或内核模式的中间

我记得有一种方法可以做到这一点,类似于unix信号,但没有得到广泛应用。但是我记不起这个词了。没有使用事件/互斥体:线程只是在随机位置被中断,函数被调用,当它返回时,线程继续。

您可以搜索
RtlRemoteCall
,但这是一个未记录的例程。Windows中的APC在语义上类似于Unix信号,但是APC要求目标线程处于可警报状态才能交付,不能保证始终满足此条件,Windows可以在特定线程的上下文中调用函数。APC不只是在一个随机位置中断线程(这将是危险的-线程可能在写入文件或获得锁或内核模式的中间)。相反,当调用线程通过调用特定函数进入可变等待时,将调度APC(请参阅APC文档)


如果您需要在特定线程中调用代码的原因是因为您正在与用户界面交互,那么它将更直接地发送到要更新的窗口句柄,或者发送到要更新的窗口句柄的窗口消息。窗口消息总是在创建窗口的线程中处理。

您确定它是另一个线程上下文中的函数吗?Windows使在另一个进程中运行代码变得很容易,但在另一个线程中我不记得看到过这种情况。请不要在标题中添加标记信息。这里的标签系统非常擅长分类,不需要帮助。:-)请看。谢谢。+1,是的-GUI的PostMessage/SendMessage,否则APC将发出警报等待。刚刚尝试了RtlRemoteCall。显然,如果线程处于不可警报等待状态(同步读取文件),则不会调用该函数。