none
請問偵測rfid card的thread寫法 RRS feed

  • 問題

  • 請教各位前輩,小弟我目前需要再PDA的程式上做一個偵測rfid card的程式,想請問要怎麼用thread不停的偵測有無卡片進入,是使用無線迴圈嗎?還是可以thread平常的時候是sleep的,當有卡片進入時在喚醒? 剛接觸thread,懇請前輩的提示
    2009年3月29日 上午 09:53

解答

  • 用 Busy Loop 當然是比較不好的方法, 除非是用在很特別的地用, 而且只在一小段時間用, 不然最好不列入考慮。
    用 Sleep 讓 thread idle 一斷時間來做 polling 是可行, 但這也意謂著 OS Scheduler 一斷時間就要幫你的 thread 排一個 task, 這在 desktop windows 或許不是啥大問題。 但在 low power consumption 的 handheld device 上最大的問題在於 假如 idle 可以時間越常, system 才有機會近入更省電的狀態, 這由其對 always on device (永遠不會 suspend) 像是 Smart Phone 就變得非常重要。

    因此會建意用 Event Driven 而不用 Polling。
    對於 detect stream interface device driver, 最常見的做法就是用RequestDeviceNotifications http://msdn.microsoft.com/en-us/library/aa927261.aspx 然後在你的 thread 裡 waiting Msg Quesue 再做進一部的 偵測動做。
    裡面有提到一個範例可以在 %_WINCEROOT%\Public\Wceshellfe\Oak\Ctlpnl\Cplmain\Power.cpp 下找到, 不過你要有 WM AKU or Windows CE 的 platform builder (這可以去 download 到), 不然也可以看一下 http://msdn.microsoft.com/en-us/library/aa447466.aspx

    2009年3月29日 下午 04:39

所有回覆

  • Hi,
    Thread在卡片進入的時候是不會被喚醒的,基本上程式這邊跟有沒有卡片在讀卡範圍內沒有絕對關係,除非你的讀卡裝置的Driver有另外做處理(丟出事件或其他動作);所以還是要持續的下讀卡的指令才會知道有沒有卡片進來。至於要用迴圈還是thread這個倒沒有一定,看你怎麼運用,比如說你是做盤點類的用途,會持續的做讀取,那就可以考慮用thread來做(也可以用Timer);按一次按鈕讀一次的就可以用迴圈來做。

    而在迴圈或是thread中可以適當的加上sleep,來釋放CPU的資源(可以搜尋一下論壇,有些資料可以看),太過頻繁的去做讀取的動作會很吃CPU資源,而且意義不大,適當就好。
    態度決定一切 ! - blog : http://bauann-makeit.blogspot.com/
    2009年3月29日 下午 04:16
    版主
  • 用 Busy Loop 當然是比較不好的方法, 除非是用在很特別的地用, 而且只在一小段時間用, 不然最好不列入考慮。
    用 Sleep 讓 thread idle 一斷時間來做 polling 是可行, 但這也意謂著 OS Scheduler 一斷時間就要幫你的 thread 排一個 task, 這在 desktop windows 或許不是啥大問題。 但在 low power consumption 的 handheld device 上最大的問題在於 假如 idle 可以時間越常, system 才有機會近入更省電的狀態, 這由其對 always on device (永遠不會 suspend) 像是 Smart Phone 就變得非常重要。

    因此會建意用 Event Driven 而不用 Polling。
    對於 detect stream interface device driver, 最常見的做法就是用RequestDeviceNotifications http://msdn.microsoft.com/en-us/library/aa927261.aspx 然後在你的 thread 裡 waiting Msg Quesue 再做進一部的 偵測動做。
    裡面有提到一個範例可以在 %_WINCEROOT%\Public\Wceshellfe\Oak\Ctlpnl\Cplmain\Power.cpp 下找到, 不過你要有 WM AKU or Windows CE 的 platform builder (這可以去 download 到), 不然也可以看一下 http://msdn.microsoft.com/en-us/library/aa447466.aspx

    2009年3月29日 下午 04:39