面對多執行緒同步的問題, 通常可以用 CreateEvent 或 CreateMutex 然後再來 WaitForSingleObject 等待存取權限.
其實 多 processes 也可以用相同的技術達到同步的目的. 只是大家都用 thread 的例子說明而已.
分別處在不同執行檔內的 thread 同步問題還常常見到的.
例如: Server 不斷的寫狀態到一個檔案, Client 則不斷的從共用檔案讀取資料.
剛好, 這類問題我過去有寫過範例:
-------------------------
Event 使用範例:
程式行為:
總共有三個 processes 分別為 Main, A, B. 其中利用 Event 進行同步的動作.
Source code 分別為:
其實主要的觀念就是建立一個有名字的Kernel Object, 然後在另一個 process 中的 thread 開啟, 最後兩個 processes 中的 threads 就靠這個共同 Object 進行 Wait 同步.
不過這裡有一點要注意的是, 利用 OpenEvent 開啟共用物件時, 一定要用SYNCHRONIZE 參數,
例如:
HANDLE hEvent=OpenEvent(SYNCHRONIZE,FALSE,"Share");
否則會傳回 NULL 而且 GetLastError() 不會告訴你錯在哪裡.
by Jing
沒有留言:
張貼留言