Ustalarım iyi forumlar. Comport yazdırdığım datanın doğruluğunu test etmek için ne kadar byte yazdığına bakıyorum. Lakin yazılan byte hep 0 olarak geri dönüyor. Ttask içindede dışındada aynı durum oluyor sebebini bir türlü bulamadım.
Normalde TTask kullanmasamda gene aynı şekilde 0 olarak döndürüyor. Atladığım bir konumu var yardımcı olabilirmisiniz ?
function TComPort.WritePort(Const Buffer; Count: Integer): Integer; var Task: ITask; I: Integer; Stopwatch: TStopwatch; Success: Boolean; BytesWritten: DWORD; WriteBuffer: TMyByteArray; Overlapped: TOverlapped; begin SetLength(WriteBuffer, Count); MoveMemory(@WriteBuffer[0], @Buffer, Length(WriteBuffer)); Task := TTASK.Create( procedure begin PurgeComm(PHandle, PURGE_TXABORT or PURGE_RXABORT or PURGE_TXCLEAR or PURGE_RXCLEAR); FillChar(Overlapped, SizeOf(Overlapped), 0); Overlapped.hEvent := CreateEvent(nil, False, False, nil); Success := WriteFile(PHandle, WriteBuffer[0], Count, BytesWritten, @Overlapped) or (GetLastError = ERROR_IO_PENDING); WaitForSingleObject(Overlapped.hEvent, 4000); if Overlapped.hEvent <> 0 then CloseHandle(Overlapped.hEvent); end ); Task.Start(); Stopwatch := TStopwatch.StartNew; try I := 0; while I < 10 do begin I := Ceil(Stopwatch.Elapsed.TotalSeconds); IF Task.STATUS = TTASKSTATUS.COMPLETED THEN Break; IF Task.STATUS = TTASKSTATUS.EXCEPTION THEN exit(-1); Application.ProcessMessages; end; if not Success then exit(-1); Result := BytesWritten; finally Stopwatch.Stop; end; end;
Normalde TTask kullanmasamda gene aynı şekilde 0 olarak döndürüyor. Atladığım bir konumu var yardımcı olabilirmisiniz ?