Недавно я реализовал связь с ACR122, используя библиотеку winscard. Я использовал таймер для вызова всех relavant API вызовов, как 1. SCardEstablishContext 2. SCardListReaders и т.д., чтобы получить статус читателяКак реализовать запуск на основе событий вместо таймера
Я сохранил интервал до пяти (5) секунд для таймера. Таким образом, вы получаете задержку в 5 секунд при получении статуса устройства.
Может ли кто-нибудь предложить мне лучший подход, например, «срабатывание на основе событий», чтобы избежать этой задержки и удалить таймер все вместе.
Как это лучше? Теперь у вас есть потоки x, посвященные опросу, каждый из которых использует выделенный стек (занимающий память), предоставляя что-то GC для обработки, потенциально вызывающий коммутаторы контекста, используя процессор, потенциально отвлекая процессор от обработки, которая могла бы использовать его более эффективно и т. Д. Честно говоря, таймер звучит как лучшая идея. –
@PeterRitchie: немного информации о том, почему было применено решение на основе потоков и предложено: - SCardGetStatusChange - это блокирующий вызов. мы можем установить его таким образом, чтобы он возвращался только тогда, когда карта была помещена на считывающее устройство. Так что реальный опрос для карты выполняется считывателем смарт-карт (который имеет микроконтроллер), а вызывающий поток неактивен. –