AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi schnelle Server Client Verbindung ohne Verluste
Thema durchsuchen
Ansicht
Themen-Optionen

schnelle Server Client Verbindung ohne Verluste

Ein Thema von AJ_Oldendorf · begonnen am 28. Mär 2025 · letzter Beitrag vom 23. Apr 2025
Antwort Antwort
Kas Ob.

Registriert seit: 3. Sep 2023
461 Beiträge
 
#1

AW: schnelle Server Client Verbindung ohne Verluste

  Alt 8. Apr 2025, 12:50
You are accessing VCL from execute ?!!!!!!!!!!!!

That is wrong, and must not be done.

Sebastian had spend his time writing you a working and correct example to build upon, that doesn't call and use VCL element from background thread, it is to the point and will serve you quite well, re-use his code.

the only thing i prefer in his code to switch to blocking instead of using Sleep(1),

@AJ_Oldendorf, the following is not for you for now:
Sleep(1) in tight loop will in best case scenario will cause 50 (to be accurate 64) context switch and that if the time period is default at 1000/64=15.625ms, in worst case when time period is 1, this will cause 1000 context switch per socket !, that is just a waste of CPU cycles, as this loop will continue as long the operation alive, even if modern CPU will handle this like nothing and Process Explorer will report this usage in %0.01 CPU usage, it is still waste cycles. Also on server expecting a hundred connection or even thousands, any application on the server can change this period and raising the context switch to what ! a million,
Best approach handling IO operation is asynchronous IO ( overlapped, IOCP ..) , the next is blocking, then lastly the worst of them is looping over poll and sleep/switch.

here a screen shot from this moment, my device is running long test for an application that utilize %25 (one core) with only 3 threads for hours now, also the IDE is opened, two browser (LibreWOlf and Supermium) with thunderbird, look at the context switch delta with how many threads are running.
2025-04-08 11_24_02-System Information.png
For me that is healthy OS with healthy applications behavior.
Kas
  Mit Zitat antworten Zitat
AJ_Oldendorf

Registriert seit: 12. Jun 2009
486 Beiträge
 
Delphi 12 Athens
 
#2

AW: schnelle Server Client Verbindung ohne Verluste

  Alt 8. Apr 2025, 13:13
Ich rufe KEINE VCL Dinge aus einem Thread auf. Das ist mir durchaus Bewusst, dass man das NICHT darf.
Meine Log-Funktion ist entkoppelt über ein Timer (Enabled) und somit Thread-safe.

Entfernen Sie bitte das Sleep(1) und Sie werden sehen, dass die CPU Auslastung auf 6-7% geht wenn keim Empfang stattfindet. Das ist sicherlich nicht normal und daher das Sleep(1). Hat Sebastian auch so bestätigt
  Mit Zitat antworten Zitat
Kas Ob.

Registriert seit: 3. Sep 2023
461 Beiträge
 
#3

AW: schnelle Server Client Verbindung ohne Verluste

  Alt 8. Apr 2025, 13:17
Ich rufe KEINE VCL Dinge aus einem Thread auf. Das ist mir durchaus Bewusst, dass man das NICHT darf.
Meine Log-Funktion ist entkoppelt über ein Timer (Enabled) und somit Thread-safe.

Entfernen Sie bitte das Sleep(1) und Sie werden sehen, dass die CPU Auslastung auf 6-7% geht wenn keim Empfang stattfindet. Das ist sicherlich nicht normal und daher das Sleep(1). Hat Sebastian auch so bestätigt
After running the code, i am not angry, i am amazed that is running without a exception or all kind of problem.

Any way the code somehow is running with no problem, so try the following one method and see the result
Delphi-Quellcode:
procedure TMyTCPServer.OnExecuteHandler(AContext: TIdContext);
var
  Buffer: TIdBytes;
begin
  FLastContext := AContext;
  AContext.Connection.IOHandler.ReadTimeout := IdTimeoutInfinite; // Wait indefinitely

  try
    ReadingIsActiv := True;

    AContext.Connection.IOHandler.ReadBytes(Buffer, -1, False); // blocking read -1 means read all available

    if Length(Buffer) > 0 then
    begin
      Inc(FAnzEmpfang);
      Inc(FBytesEmpfang, Length(Buffer));
      FDataQueue.Enqueue(Buffer);

      // either "TThread.Queue(nil,..", (nil for main thread) or siwtch to Synchronize
      TThread.Queue(nil, procedure
      begin
        TForm1(FForm).Log('Receive-Anzahl: ' + FAnzEmpfang.ToString);
        TForm1(FForm).Log('Receive-Bytes: ' + FBytesEmpfang.ToString);
        FAnzEmpfang := 0;
        FBytesEmpfang := 0;
      end);
    end;
  except
    on E: Exception do
    begin
      // same as above
      TThread.Queue(nil, procedure
      begin
        TForm1(FForm).Log('Error: ' + E.Message);
      end);
    end;
  end;

  ReadingIsActiv := False;
end;
Kas
  Mit Zitat antworten Zitat
Kas Ob.

Registriert seit: 3. Sep 2023
461 Beiträge
 
#4

AW: schnelle Server Client Verbindung ohne Verluste

  Alt 8. Apr 2025, 13:36
Also try this
Delphi-Quellcode:
procedure TMyTCPServer.OnExecuteHandler(AContext: TIdContext);
var
  Buffer: TIdBytes;
begin
  // FLastContext := AContext; // if needed, yet how it is useful in multihtreaded server/application ?!
  // removed ReadingIsActiv , don't understand it usefulness

  if AContext.Connection.IOHandler.CheckForDataOnSource(10) then
  begin
      AContext.Connection.IOHandler.ReadBytes(Buffer, -1, False);
      if Length(Buffer) > 0 then
      begin
        Inc(FAnzEmpfang);
        Inc(FBytesEmpfang, Length(Buffer));
        FDataQueue.Enqueue(Buffer);

        TThread.Queue(nil, procedure
        begin
          TForm1(FForm).Log('Receive-Anzahl: ' + FAnzEmpfang.ToString);
          TForm1(FForm).Log('Receive-Bytes: ' + FBytesEmpfang.ToString);
          FAnzEmpfang := 0;
          FBytesEmpfang := 0;
        end);
      end;
  end;
end;
Simpler not blocking forever and still using the poll state but at 10ms, meaning at wrost case scenario it will be 100 times per second.
Kas
  Mit Zitat antworten Zitat
AJ_Oldendorf

Registriert seit: 12. Jun 2009
486 Beiträge
 
Delphi 12 Athens
 
#5

AW: schnelle Server Client Verbindung ohne Verluste

  Alt 8. Apr 2025, 13:40
Ich denke ihr Code ist nicht besser. Siehe Ergebnis

Vorher habe ich im Server 2-3 Empfangsaufrufe gehabt worin meine 12200000 Bytes übertragen wurden. Jetzt sind es ganz viele Aufrufe mit teilweise 0 Bytes... Das sieht nicht richtig aus.

Das Problem mit dem Schreiben (Write) besteht auch nach wie vor. Ich würde Stand jetzt sagen, es ist schlechter geworden aufgrund des Empfangs.
Write-Problem besteht weiterhin.

Code:
Server läuft auf Port 5000
Receive-Anzahl: 1
Receive-Bytes: 65536
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 7
Receive-Bytes: 229376
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 2
Receive-Bytes: 65536
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 2
Receive-Bytes: 65536
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 2
Receive-Bytes: 65536
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 2
Receive-Bytes: 65536
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 2
Receive-Bytes: 65536
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 2
Receive-Bytes: 65536
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 2
Receive-Bytes: 65536
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 2
Receive-Bytes: 65536
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 2
Receive-Bytes: 65536
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 2
Receive-Bytes: 65536
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 2
Receive-Bytes: 65536
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 2
Receive-Bytes: 65536
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 2
Receive-Bytes: 65536
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 2
Receive-Bytes: 65536
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 2
Receive-Bytes: 65536
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 2
Receive-Bytes: 65536
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 2
Receive-Bytes: 65536
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 2
Receive-Bytes: 65536
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 2
Receive-Bytes: 65536
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 3
Receive-Bytes: 98304
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 2
Receive-Bytes: 65536
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 2
Receive-Bytes: 65536
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 2
Receive-Bytes: 65536
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 3
Receive-Bytes: 98304
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 3
Receive-Bytes: 98304
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 2
Receive-Bytes: 65536
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 3
Receive-Bytes: 98304
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 2
Receive-Bytes: 65536
Receive-Anzahl: 0
Receive-Bytes: 32768
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 3
Receive-Bytes: 98304
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 2
Receive-Bytes: 65536
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 2
Receive-Bytes: 65536
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 2
Receive-Bytes: 65536
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 2
Receive-Bytes: 65536
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 2
Receive-Bytes: 65536
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 2
Receive-Bytes: 65536
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 2
Receive-Bytes: 65536
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 2
Receive-Bytes: 65536
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 2
Receive-Bytes: 65536
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 3
Receive-Bytes: 98304
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 2
Receive-Bytes: 65536
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 3
Receive-Bytes: 98304
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 2
Receive-Bytes: 65536
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 2
Receive-Bytes: 65536
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 3
Receive-Bytes: 98304
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 3
Receive-Bytes: 98304
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 2
Receive-Bytes: 65536
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 3
Receive-Bytes: 98304
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 2
Receive-Bytes: 65536
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 2
Receive-Bytes: 65536
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 2
Receive-Bytes: 65536
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 3
Receive-Bytes: 98304
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 2
Receive-Bytes: 65536
Receive-Anzahl: 0
Receive-Bytes: 0
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 32768
Receive-Anzahl: 1
Receive-Bytes: 19376
01-Server: Lesevorgang parallel aktiv
01-Server: Gesendet. Restanzahl: 99
01-Server: Lesevorgang parallel aktiv
01-Server: Gesendet. Restanzahl: 98
01-Server: Lesevorgang parallel aktiv
01-Server: Gesendet. Restanzahl: 97
01-Server: Lesevorgang parallel aktiv
01-Server: Gesendet. Restanzahl: 96
01-Server: Lesevorgang parallel aktiv
01-Server: Gesendet. Restanzahl: 95
01-Server: Lesevorgang parallel aktiv

Auch der zweite Vorschlag https://www.delphipraxis.net/1547899-post50.html bringt das gleiche Ergebnis. Haben Sie den Code selber getestet?

Geändert von AJ_Oldendorf ( 8. Apr 2025 um 13:43 Uhr)
  Mit Zitat antworten Zitat
Kas Ob.

Registriert seit: 3. Sep 2023
461 Beiträge
 
#6

AW: schnelle Server Client Verbindung ohne Verluste

  Alt 8. Apr 2025, 13:58
Still the translation playing with my head (may be),

And still don't understand the problem quite right, i am running the code, and i am amazed like the famous meme, it is running without a exception and memory corruption, the code i provided is only for one part, the most critical one you were after the TCP reading shipping down the pipe, but there is still bugs and problem in the code so

1) there is few other places you need to fix the VCL usage in them namely these
TProcessingThread.Execute
TSendeThread.Execute
TMyTCPServer.OnServerReadData
and that is server side

2) I don't understand you complain about 0, you are using multithreading and sharing data, so yes 0 is very possible here.

3) translation gives me this phrase "The write problem still exists." , i am not sure what this is about, as these lines doesn't show when i am running your original code, the code i didn't change anything except removing few inline variables
Code:
01-Server: Lesevorgang parallel aktiv
01-Server: Gesendet. Restanzahl: 99
01-Server: Lesevorgang parallel aktiv
01-Server: Gesendet. Restanzahl: 98
01-Server: Lesevorgang parallel aktiv
01-Server: Gesendet. Restanzahl: 97
01-Server: Lesevorgang parallel aktiv
01-Server: Gesendet. Restanzahl: 96
01-Server: Lesevorgang parallel aktiv
01-Server: Gesendet. Restanzahl: 95
01-Server: Lesevorgang parallel aktiv
These i don't see them !
Kas
  Mit Zitat antworten Zitat
Kas Ob.

Registriert seit: 3. Sep 2023
461 Beiträge
 
#7

AW: schnelle Server Client Verbindung ohne Verluste

  Alt 8. Apr 2025, 14:00
Client also has the same problematic thread access like the server, these should be fixed.
Kas
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
10.075 Beiträge
 
Delphi 12 Athens
 
#8

AW: schnelle Server Client Verbindung ohne Verluste

  Alt 8. Apr 2025, 13:54
Meine Log-Funktion ist entkoppelt über ein Timer (Enabled) und somit Thread-safe.
Nicht ganz. Der Zugriff auf die visuelle Komponente passiert im Hauptthread, aber beide Threads greifen ohne Synchronisation auf die Stringliste zu.

Ich komme jetzt gerade nicht dazu, mir das genauer anzuschauen. Ich versuche es heute Abend.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.784 Beiträge
 
Delphi 12 Athens
 
#9

AW: schnelle Server Client Verbindung ohne Verluste

  Alt 8. Apr 2025, 14:00
Ich rufe KEINE VCL Dinge aus einem Thread auf. Das ist mir durchaus Bewusst, dass man das NICHT darf.
Meine Log-Funktion ist entkoppelt über ein Timer (Enabled) und somit Thread-safe.
Ergänzend zu Sebastians Kommentar liegst du hier leider noch aus anderen Gründen falsch. Das Setzen von TTimer.Enabled ruft intern ein SetTimer auf. Dort steht in der Doku zum ersten Parameter:
Zitat:
A handle to the window to be associated with the timer. This window must be owned by the calling thread.
Wenn du VCL-Aufrufe aus einem Thread entkoppeln willst, dann verwende besser Synchronize oder Queue.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:24 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz