2010-07-27 48 views
0

我有一個C++單例作爲單獨的線程運行。這個單例是從一個庫提供的基類派生的,它覆蓋了Logon(...)上的方法。 onLogon方法是同步的,如果我們接受登錄嘗試,它想立即知道。C++ Singleton線程問題

問題是我們需要通過消息將登錄信息傳遞給安全服務器。我們可以向安全服務器監聽器(一個單獨的線程)註冊回調,以獲取我們發送的登錄驗證消息的結果。我的問題是,如何阻止onLogon方法,使得線程可以通過我在安全服務器偵聽器線程中註冊的回調喚醒,然後如何訪問安全服務器在線程中返回的響應 - 安全的方式(即,我需要能夠處理多個併發登錄請求)。

我完全難住。

回答

2

使用空的信號量。將證書發送到安全服務器後,採取信號量。由於它將是空的,它會阻止執行。然後將回調函數發佈到信號量。然後這將在原始線程上恢復執行。

由於回調通常允許匿名值作爲參數傳遞,所以可以註冊一個指向可以填充響應的數據結構的指針。