2013-05-25 15 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。 –

相關問題