2014-08-31 8 views
1

Недавно я реализовал связь с ACR122, используя библиотеку winscard. Я использовал таймер для вызова всех relavant API вызовов, как 1. SCardEstablishContext 2. SCardListReaders и т.д., чтобы получить статус читателяКак реализовать запуск на основе событий вместо таймера

Я сохранил интервал до пяти (5) секунд для таймера. Таким образом, вы получаете задержку в 5 секунд при получении статуса устройства.

Может ли кто-нибудь предложить мне лучший подход, например, «срабатывание на основе событий», чтобы избежать этой задержки и удалить таймер все вместе.

ответ

0

Ниже приведен общий подход, который я выполнил в двух проектах, которые я реализовал. Упование

помогает.

1) Инициализировать все считывателей, которые подключены к системе (с использованием APIs как

SCardEstablishContext и SCardListReaders)

2) Начать опрос для карты по каждому из читателей с резьбой (с помощью apis, как

SCardGetStatusChange). У меня был бы один поток для каждого читателя. Когда считыватель обнаруживает карту, то на нее снимается событие для совершения карточных операций.

.

3) Ручка события поднятого опроса нить, чтобы сделать операции по карте (с использованием APIs как

SCardConnect SCardTransmit используется)

Я думаю, что выше подход поможет вам избавиться от таймеров и оптимизацию производительности.

+0

Как это лучше? Теперь у вас есть потоки x, посвященные опросу, каждый из которых использует выделенный стек (занимающий память), предоставляя что-то GC для обработки, потенциально вызывающий коммутаторы контекста, используя процессор, потенциально отвлекая процессор от обработки, которая могла бы использовать его более эффективно и т. Д. Честно говоря, таймер звучит как лучшая идея. –

+0

@PeterRitchie: немного информации о том, почему было применено решение на основе потоков и предложено: - SCardGetStatusChange - это блокирующий вызов. мы можем установить его таким образом, чтобы он возвращался только тогда, когда карта была помещена на считывающее устройство. Так что реальный опрос для карты выполняется считывателем смарт-карт (который имеет микроконтроллер), а вызывающий поток неактивен. –

 Смежные вопросы

  • Нет связанных вопросов^_^