![]() |
|
|
#16
|
||||
|
||||
|
Код:
OverlapRead.hEvent := CreateEvent(nil, true, false, nil);
if OverlapRead.hEvent = 0 then
begin
ShowMessage('Ошибка создания события.');
exit;
end;
//и жду данных:
if not WaitCommEvent(hPort, dwMask, @OverlapRead) then
begin
if GetLastError = ERROR_IO_PENDING then
WaitForSingleObject(OverlapRead.hEvent, INFINITE)
else
begin
ShowMessage('Ошибка при ожидании данных.');
exit;
end;
end;Последний раз редактировалось Bargest, 12.07.2011 в 08:04. |
|
#17
|
||||
|
||||
|
Актуально.
|
|
#18
|
||||
|
||||
|
Цитата:
Код:
function ReadCOM(HCOM: THandle; var Buffer; NumberOfBytesToRead: Cardinal): Integer;
var
overlapped: TOverlapped;
evtmask: Cardinal;
numberofbytestransferred: Cardinal;
errors: DWORD;
stat: TComStat;
numberofbytesread: DWORD;
inque: Integer;
begin
numberofbytesread:=0;
ZeroMemory(@overlapped, SizeOf(TOverlapped));
overlapped.hEvent:=CreateEvent(nil, True, False, nil);
if not WaitCommEvent(HCOM, evtmask, @overlapped) then
begin
if (GetLastError=ERROR_IO_PENDING) and (WaitForSingleObject(overlapped.hEvent, INFINITE)=WAIT_OBJECT_0) then
GetOverlappedResult(HCOM, overlapped, numberofbytestransferred, False);
end;
ClearCommError(HCOM, errors, @stat);
inque:=stat.cbInQue;
if inque>0 then
begin
inque:=Min(inque, NumberOfBytesToRead);
ReadFile(HCOM, Buffer, inque, numberofbytesread, @overlapped);
end;
CloseHandle(overlapped.hEvent);
Result:=numberofbytesread;
end; |
|
#19
|
||||
|
||||
|
Спасибо, буду пробовать.
А насчет разных имён - это я просто переименовал хэндл, а в старых постах осталось Последний раз редактировалось Bargest, 12.07.2011 в 11:14. |