Newsgroups : Borland : borland.public.delphi.nativeapi.win32 : 2006 Jan : Overlapped Serial Commnunications - Receiving

www.cryer.info
Managed Newsgroup Archive

Overlapped Serial Commnunications - Receiving

Subject:Overlapped Serial Commnunications - Receiving
Posted by:"gg" (g..@velleman.be)
Date:Mon, 23 Jan 2006 11:20:02 +0100

I'm encountering a bit of a problem while reading from the com port in
overlapped mode. The debug messageboxes (with the "Received" messages) are
blank at times etc, they don't show their real texts. My guess is that I
overwrite memory in some way that I shouldn't be overwriting..

Here's the reader thread code (it's fairly standard - a transcript from
msdn - originally in C):

procedure TSerialReader.Execute;
var
  osReader: TOVERLAPPED;
  hArray: array[0..1] of THandle;
  ThreadDone: Boolean;
  WaitingOnRead: Boolean;
  Buffer: array[0..255] of Char;
  dwRes: DWORD;
  dwRead: DWORD;
begin
  ZeroMemory(Addr(osReader), SizeOf(osReader));
  osReader.hEvent := CreateEvent(nil, True, True, nil);

  hArray[0] := osReader.hEvent;
  hArray[1] := hSigExit;

  ThreadDone := False;
  WaitingOnRead := False;

  while not ThreadDone do
  begin
    if not WaitingOnRead then
    begin
      if not ReadFile(hPort, Buffer, SizeOf(Buffer), dwRead, @osReader) then
      begin
        if GetLastError = ERROR_IO_PENDING then
          WaitingOnRead := True;
      end else begin
          MessageDlg('Received1.', mtInformation, [mbOk], 0);
      end;
    end;

    if True then
    begin
      dwRes := WaitForMultipleObjects(2, @hArray, False, 200);
      case dwRes of
        WAIT_OBJECT_0: begin
          if GetOverlappedResult(hPort, osReader, dwRead, False) then
          begin
            MessageDlg('Received2.', mtInformation, [mbOk], 0);
          end;
          WaitingOnRead := False;
          end;
        WAIT_OBJECT_0+1: begin
          ThreadDone := True;
          end;
        WAIT_TIMEOUT: begin
          end;
      end;
    end;
  end;
  MessageDlg('Reader thread exiting.', mtInformation, [mbOk], 0);
  CloseHandle(osReader.hEvent);
end;

Glossary

Replies:

www.cryer.info
Managed Newsgroup Archive