假設您在Win32中有兩個線程。假設主UI線程啓動一個工作線程A.假設線程A創建時,返回主線程中的類的指針被髮送給線程A.在線程A處理期間的某一時刻,線程A調用主函數線程通過指針。線程A和主線程永遠不會爭用相同的數據,也不會同時調用同一個函數。線程設計和設計以及從C++中的另一個線程中調用函數Win32
這是不好的做法?
如果是的話,那麼這個功能的正確設計是什麼。線程A需要訪問主線程中的函數,以訪問保存在主線程中的數據。但預計線程A在主線程訪問數據時不會調用主線程中的函數。因此,不會有數據爭用。但是,當線程仍在調用主線程中的函數時,主線程可能會重新啓動。
只要沒有數據爭用並且被調用的函數是可重入的,這樣做還是可以在其他線程中調用函數?
如果工作線程調用一個函數,那麼定義該函數的位置並不重要,它將始終在工作線程的上下文中調用。你不能在其他線程中「調用」函數。 –
Joachim,感謝您的信息。 「你不能在其他線程中調用函數」是什麼意思?你說這是不好的做法嗎?如果是這樣的話,在Win32線程中調用函數的正確設計是什麼 - 在不可見的窗口線程中使用消息(比直接調用需要更長的時間)? – brimaa
我的意思是說所有*函數都是從例如「線程A」將在「線程A」的上下文中。要在另一個線程環境中調用函數,必須使用[消息傳遞](http://en.wikipedia.org/wiki/Message_passing),並讓其他線程執行實際的函數調用。 –