我有一個庫,我正在編寫使用Win32 API處理按鍵事件。每次擊鍵發生時,兩個單獨的事件幾乎同時發生(this和this)。在我的庫中,我有兩個獨立的線程,一個用於每種事件(鉤子和原始)。等待兩個近同步事件的策略
線程1(掛鉤)等待線程2(原始)以獲取其數據,然後繼續。它目前使用類似屏障的機制來實現這一點。所以這兩個事件都必須在實際處理之前進入。到現在爲止還挺好。
但有一個問題(當然)。在一個理想的世界裏,我一定會一直得到這兩件事。不幸的是,由於我不明白的原因,有時Windows決定不向我發送其中一個事件(通常是另一個應用程序暫時與輸入有關)。因此,如果我輸入「Hello world」,線程1可能正在處理「H」,而線程2可能從未得到「H」事件並跳到「e」。所以這些事件不同步,所有的事情都打破了。
基本上我想是這樣的:我要配對的事件在某種程度上是有道理的。如果線程1得到一個「H」事件,並且線程2得到一個「e」,它應該或者(1)嘗試等待正確的「H」事件,或者(2)超時(是的,線程1可以優雅地失敗如果必須的話)。既然我知道這些事件都應該在一定的時間窗口內進入,我想這使得這是一個實時編程任務。
我對實時編程一無所知。是否已有解決方案/數據結構?如果是這樣,他們是什麼?如果不是,這種類型的問題的一般方法是什麼(保持兩個時間上緊密的事件同步)?
謝謝。
你爲什麼要等兩個? – bdonlan
一個API可以讓我控制擊鍵的位置,另一個讓我確定它來自哪個鍵盤。我希望能夠做到這兩件事(控制哪裏輸入取決於哪個鍵盤發送它)。這就是現在這種令人頭痛的事件。 –
無論如何,WM_KEYUP/WM_KEYDOWN消息只能進入具有輸入焦點的窗口......? – bdonlan