Можно ли иметь несколько потоков STDIN? - PullRequest
3 голосов
/ 19 января 2011

Я надеюсь подключить два USB-сканера штрих-кода к одному компьютеру, что позволит двум людям одновременно сканировать штрих-коды билетов. Однако, если оба человека сканируют одновременно, ввод из STDIN будет запутанным.

Есть ли способ настроить разные потоки STDIN, каждый из которых связан с определенным портом USB? Скрипт консоли написан на Ruby, хотя указатели на любом языке будут высоко оценены.

Ответы [ 3 ]

3 голосов
/ 23 января 2011

Попробуйте сначала подключить 2 USB-сканера штрих-кода и проверьте, происходит ли то, чего вы боитесь. Я подозреваю, что все цифры штрих-кода отправляются в одном пакете, в то время как прерывания от других клавиатуроподобных устройств находятся в режиме удержания - поэтому вы не получите два «чересстрочных» кода вместе.

Невозможно иметь более одного стандартного ввода, не буквально. Другие параметры будут зависеть от используемой ОС - в Linux, возможно, драйверы предоставляют разные символьные устройства для разных сканеров. В Windows, я полагаю, вам нужно научиться говорить по протоколу USB HID ... лучше всего, если вам не нужно ничего этого делать.

3 голосов
/ 19 января 2011

Чтобы ответить на ваш вопрос напрямую, нет возможности иметь более одного STDIN. Лучше всего будет прочитать данные из файла (я думаю, у вас должно быть символьное устройство или что-то еще для этого сканера)

0 голосов
/ 19 января 2011

Что делать, если вы используете Mutex для их синхронизации, чтобы одновременно можно было обрабатывать только одно сканирование?

Вот учебник по работе с потоками в Ruby

http://ruby-doc.org/docs/ProgrammingRuby/html/tut_threads.html

...