Пример DLL с рабочим потоком


Автор Jurgis Armanavichius.

Компилятор: VC6

Описание:

Часто разработчику программы для PC бывает нужно постоянно отслеживать какие-то события в своей программе. Например, обрабатывать ввод данных из COM-порта. Однако, эти данные могут поступать асинхронно, в непредсказуемые моменты времени. Для решения такой задачи можно повставлять проверку/обработку данных из COM-порта по всей программе. Однако имеется более простой и удобный путь. Можно применить отличнейшее средство Win32 - потоки (threads).

В этом случае уже не нужно заботиться о других важных моментах программы: можно целиком сосредоточиться на нужном COM-порте и поступающих с него данных. Для простоты понимания этого процесса представим, что у нас имеется единственное простое приложение, которое целиком и полностью отдано задаче обработки поступающих данных. В нем можно также производить их предварительную обработку, например, поступившую по COM-порту строку "SET TEMPERATURE TO 100 DEG" можно преобразовать во внутреннюю команду:

Execute(SET_TEMPERATURE, 100);

Вот таким простым приложение, которое целиком и полностью отдано задаче обработки поступающих данных, и будет наш поток. Давайте рассмотрим простой пример. В данном примере приводится простая DLL, которую можно вызывать из любой программыWin32, включая простые консольные приложения. DLL при своем запуске инициирует рабочий поток и позволяет пользователю получать байты, поступившие из COM-порта. Для интерфейса с DLL используются три простые функции:

THREADPROBEDLL_API void ThreadProbeDll_Serial_flush(void);
THREADPROBEDLL_API BOOL ThreadProbeDll_Serial_empty(void);
THREADPROBEDLL_API int  ThreadProbeDll_Serial_getc(void);

Первая из них очищает FIFO (объемом 256 байт), вторая проверяет пусто FIFO или нет, а третья получает очередной поступивший байт. Для простоты открытие и закрытие COM-порта производится прямо в рабочем потоке (см. файл "ThreadFunctions.cpp"). Там же производится предустановка параметров COM-порта.

Для иллюстрации применения данной простой DLL в консольном приложении служит пример "ThreadProbe2". Все архивы распаковать в общий каталог с сохранением путей.

Download:

ThreadProbeDll: Download demo project with sources

SimplestComPort: Download demo project with sources

ThreadProbe2: Download demo project with sources