Курсовая работа: Создание измерительного аппаратно-программного комплекса термометра на основе микроконтроллеров семьи ATMEGA

Передача данных является довольно быстрой операцией, поэтому как правило ее выполняют из главного потока приложения. На Delphi это выглядит так:

var

dwWrite: DWORD;

OverWrite: TOverlapped;

WriteBytes: array of Byte;

begin

OverWrite.hEvent := CreateEvent(nil, True, False, nil);

if OverWrite.hEvent = Null then

raise Exception.Create('Error creating write event');

if (not WriteFile(hPort, WriteBytes, SizeOf(WriteBytes),

dwWrite, @OverWrite))

and (GetLastError <> ERROR_IO_PENDING) then

raise Exception.Create('Error writing port');

end;

В данном примере функция WriteFile() выполняет асинхронную запись массива байтов WriteBytes в порт. Она сразу возвращает управление, и запись в порт происходит параллельно с выполнением основного кода потока. Если результат WriteFile() равен False, то это значит, что на момент возврата управления передача массива байтов еще не закончилась. Поэтому код ошибки выполнения WriteFile() в данном случае должен быть равен ERROR_IO_PENDING. Переменная OverWrite — overlapped-структура, необходимая для асинхронных операций.

В принципе, вас не должно волновать, когда закончится передача массива байтов. Зато момент приема одного или нескольких символов действительно важен. Поэтому его можно разбить на две части: инициирование приема и определение момента приема с последующим чтением символов. Поскольку при этом приходится считаться с фактором ожидания приема символа, рекомендуется функции приема данных вынести в отдельный поток. Передавать данные можно и из основного потока приложения, поскольку это происходит довольно быстро. А вот событие приема символа будем ожидать в отдельном потоке.

Рассмотрение работы с потоками в Windows, в

К-во Просмотров: 443
Бесплатно скачать Курсовая работа: Создание измерительного аппаратно-программного комплекса термометра на основе микроконтроллеров семьи ATMEGA