Einzelnen Beitrag anzeigen

Tryer

Registriert seit: 16. Aug 2003
200 Beiträge
 
#10

Re: Objekt in Thread und Mainthread verwenden

  Alt 1. Apr 2010, 19:44
Zitat von Neutral General:
Delphi-Quellcode:
..
        Synchronize(FClient.ReceiveData); //<=========
      end;
    finally
      CS.Leave; //<=========
    end;
Unter der Vorraussetzung das ReceiveData auch per CS.Enter zugreifen will (z.B. auf FBuffer) ist das ein klassischer Deadlock, da der Thread die CS noch hält.

Wenn der MainThread nur auf die in FBuffer bereitgestellten Daten zurückgreift muss auch nur der Zugriff auf FBuffer synchronisiert werden, das schafft mehr Atempausen in denen die einzelnen Threads frei arbeiten können:
Delphi-Quellcode:
    ..
    if not FClient.FTCPClient.Connected then continue;

    if not FClient.FTCPClient.Socket.InputBufferIsEmpty then
    begin
      FClient.FTCPClient.Socket.ReadBytes(Buff,FClient.FTCPClient.Socket.InputBuffer.Size);
      CS.Enter;
      try
        FClient.FBuffer.Write(Buff[0],Length(Buff));
      finally
        CS.Leave;
      end;
      Synchronize(FClient.ReceiveData);
    end;
    ..
Grüsse, Dirk
  Mit Zitat antworten Zitat