2010-12-12 101 views
0

如何使線程安全的回調函數。這個函數將被不同的線程調用來更新UI。這個回調函數將有一個HWND參數,由調用者填充。該函數將使用此HWND參數來更新GUI。 HWND對於不同的呼叫會有所不同。線程安全回調函數

請告訴我如何使這個回調線程安全。

問候。

約翰

回答

2

請告訴我,我怎樣才能使這個回調線程安全的。

如果沒有回調函數所要求的狀態,它已經是線程安全的,除非GUI函數本身不是線程安全的(請參閱本答覆的後半部分)。

如果需要狀態,請在該狀態下包含一個互斥鎖,並在任何讀取/寫入訪問期間鎖定該互斥鎖。

還有更復雜的鎖範例(例如多讀卡器/單寫鎖),但您可能不需要GUI。


另一個問題了圖形用戶界面(真正的Java Swing的,我不記得這是否是爲Win32真的還是假的)是GUI操作通常應在一個特定的線程來執行。在win32中,這是發佈和發送消息(由一個線程處理)的原因。如果你想要使用這種方法,只要你想要執行一個GUI操作,你應該檢查你是否在GUI線程中(不記得如何在win32中做到這一點),或者執行PostMessage()呼叫啓動特定的GUI操作。