Отложенный (overlapped) режим ввода/вывода
При отложенном режиме функции connectNamedPipe, Readfile, writefile, transactNamedPipe сразу же возвращают управление до окончания операции.
Для определения момента окончания операции, результата операции (реально считано или записано байтов), наличия ошибок служит запись overlapped .
Момент окончания операции определяется с помощью объекта-события. События создаётся при заполнении записи overlapped. Фоновая операция ввода/вывода после завершения активи-рует события сигнализируя об окончании операции. С помощью ф.Waitforsingleobject можно зафиксировать этот момент в программе.
Отложенный режим включается флагом
File_flag_overlapped в функциях createnamedpipe и createfile.
Пример:
Var hpipe:thendle;
…
hpipe:=createnamedpipe(pchar(‘\\ . \pipe\p1’),pipe_access_duplex or file_flag_overlapped,…);
…
var overlap: toverlapped;last:cardinal;res:bool;
…
fillchar(overlap,0,sizeof(toverlapped));
overlap.event:=createevent(nil,true,false,nil);
//создать событие –1 раз
…
rez:=connectnamedpipe(hpipe, @overlap);
if not rez then begin
last:=getlasterror; //получение ошибки
if last=error_io_pening //операция выполняется
then begin last:= waitforsingleobject(overlap.hevent,3000);//подождать 3 секунды
if last=wait_object_0 //операция завершилась
then messagebox(‘все нормально’)
else messagebox(‘таймаут’);
end
else messagebox(‘ошибка подключения’)
end;
Похожие записи
No user прокомментировали сообщение
Оставить комментарий