![]() |
|
#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; jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось Bargest, 12.07.2011 в 08:04. |
#17
|
||||
|
||||
![]() Актуально.
jmp $ ; Happy End! The Cake Is A Lie. |
#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
|
||||
|
||||
![]() Спасибо, буду пробовать.
А насчет разных имён - это я просто переименовал хэндл, а в старых постах осталось jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось Bargest, 12.07.2011 в 11:14. |