2014-08-31 52 views
1

我最近使用winscard庫實現了與ACR122的通信。 我已經使用一個計時器來調用所有的初步認識API調用等 1. SCardEstablishContext 2. SCardListReaders等,以獲得讀取器如何實現基於事件的觸發而不是定時器

我遵守了間隔爲五(5)秒的計時器的狀態。所以這會使設備狀態延遲5秒。

任何人都可以建議我一個更好的方法,如「基於事件的觸發器」,以避免這種延遲,並一起刪除計時器。

回答

0

下面是我在已實施的幾個項目中遵循的一般方法。希望它

幫助。

1)初始化所有連接到該系統(使用API​​,如

SCardEstablishContext和SCardListReaders)

2),用於卡上的每個的讀者從線程開始輪詢的讀者(使用apis like

SCardGetStatusChange)。我會爲每個讀者提供一個線程。當讀者檢測到一張卡片

放在它上面引發事件做卡片交易。

3)處理由輪詢線程提升到制卡交易(使用API​​,如使用

SCardConnect SCardTransmit)

我覺得上面的方法將幫助你擺脫定時器和優化性能的事件。

+0

這樣更好嗎?現在你有x個線程專門用於輪詢,每個線程都使用專用堆棧(佔用內存),給GC處理一些內容,可能導致上下文切換,使用CPU,可能會使CPU遠離可以更有效地使用它的處理,等等。坦率地說,一個計時器聽起來更好。 – 2014-09-16 10:37:10

+0

@PeterRitchie:關於爲什麼使用和建議基於線程的解決方案的一些背景: - SCardGetStatusChange是一個阻塞調用。我們可以設置它,只有當卡放在讀卡器上時它纔會返回。所以真正的卡查詢是由智能卡讀卡器(它有一個微控制器)和調用線程是空閒的。 – 2014-09-16 13:41:50

相關問題