Çok Yakında Yeni Bir Arayüzle karşınızdayız! http://yeni.delphican.com/

Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Writefile yazılan byte sorunu
#1
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.

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 ?
Cevapla
#2
Burada CreateFile önemli. Görüldüğü üzere yazma işlemini Overlapped olarak yapıyorsunuz, thread kullandığınız için Overlapped kullanmasanız da olur. Overlapped yazdırma asenkron olduğu için yazılan byte'ı kontrol ettiğinizde doğru değeri göremeyebilirsiniz. Bu nedenle Overlapped'ı iptal edip öyle deneyin.
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#3
Hocam cevap verdiğiniz için teşekkür ederim. Overlapped kaldırınca dediğiniz gibi düzeldi teşekkür ederim.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  SQl tarih Sorunu Bay_Y 7 266 11-11-2019, Saat: 09:06
Son Yorum: Bay_Y
  Quick Reportta Türkçe sorunu boreas 4 181 08-11-2019, Saat: 00:14
Son Yorum: boreas
  Fastreport barcod yazdirma sorunu TheEAK 15 1.092 07-11-2019, Saat: 15:57
Son Yorum: mcuyan
  SOAP WSDL | Tarihi sorunu ve C# import sorunu hk. pro_imaj 2 194 24-10-2019, Saat: 08:51
Son Yorum: sabanakman
  Datasnap free yapmama sorunu. seci20 1 119 24-10-2019, Saat: 08:16
Son Yorum: 3ddark



Konuyu Okuyanlar: 1 Ziyaretçi