Ignore:
Timestamp:
Nov 16, 2011, 7:24:09 AM (13 years ago)
Author:
george
Message:
  • Added: New TCommDelay interconnection block for creating time delay in route.
  • Fixed: In TCommThread do not obtain lock during sending data in thread.
  • Modified: TCommFrame have ability to change special control symbols.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • PinConnection/UCommThread.pas

    r293 r296  
    1616  { TCommThreadReceiveThread }
    1717
    18   TCommThreadReceiveThread = class(TListedThread)
     18  TCommThreadReceiveThread = class(TTermThread)
    1919  public
    2020    Parent: TCommThread;
     
    103103    FReceiveThread.Start;
    104104  end else begin
    105     FReceiveThread.Terminate;
    106     FReceiveThread.WaitFor;
    107105    FreeAndNil(FReceiveThread);
    108106  end;
     
    139137
    140138procedure TCommThreadReceiveThread.Execute;
     139var
     140  TempStatus: Integer;
    141141begin
    142   try
    143     with Parent do
    144     repeat
    145       // Check if new data arrived
    146       if FDataAvailable.WaitFor(1) = wrSignaled then
     142  with Parent do
     143  repeat
     144    // Check if new data arrived
     145    if FDataAvailable.WaitFor(1) = wrSignaled then begin
    147146      try
    148147        FInputBufferLock.Acquire;
    149148        Stream.Size := 0;
    150149        Stream.WriteStream(FInputBuffer, FInputBuffer.Size);
    151         Pin.Send(Stream);
    152       finally
    153150        FDataAvailable.ResetEvent;
    154151        FInputBuffer.Clear;
     152      finally
    155153        FInputBufferLock.Release;
    156154      end; // else Yield;
     155      Pin.Send(Stream);
     156    end;
    157157
    158       // Check if state changed
    159       if FStatusEvent.WaitFor(0) = wrSignaled then
     158    // Check if state changed
     159    if FStatusEvent.WaitFor(0) = wrSignaled then begin
    160160      try
    161161        FInputBufferLock.Acquire;
    162         Pin.Status := FStatusValue;
     162        TempStatus := FStatusValue;
    163163      finally
    164164        FStatusEvent.ResetEvent;
    165165        FInputBufferLock.Release;
    166166      end;
    167     until Terminated;
    168   finally
    169   end;
     167      Pin.Status := TempStatus;
     168    end;
     169  until Terminated;
    170170end;
    171171
Note: See TracChangeset for help on using the changeset viewer.