![]() |
Re: Nonblocking/Threadblocking?
hi,
damals war ich dabei, einen webserver zu programmieren, den ich mittlerweile schon über vier Jahre lang einsetze :) Zunächst startet man einen neuen Behandlungsthread durch
Delphi-Quellcode:
im Thread selbst kann man dann WinSocketStreams bearbeiten. Es muss allerdings, wie vielleicht schon aus der Klassenbezeichung zu vermuten, eine eigene Threadklasse abgeleitet werden:
procedure TForm1.ServerSocket1GetThread(Sender: TObject;
ClientSocket: TServerClientWinSocket; var SocketThread: TServerClientThread); begin // [...] SocketThread := nil; SocketThread := TSendThread.Create(true,ClientSocket); // create susepended while not assigned(SocketThread) do Application.ProcessMessages; (SocketThread as TSendThread).MemoThread := form1.MyThread; // Callback-Information setzen (SocketThread as TSendThread).processline :=memo2.Lines.Count-1; // http-request (SocketThread as TSendThread).Resume; // threadausführung starten end;
Delphi-Quellcode:
Der SocketStream hängt dann beim Schreiben nicht alles auf. Zu deiner Frage: Das Timing des Schreibens wird durch den SocketStream geregelt. Für Leseoperationen gilt afaik das gleiche, sprich du gibst eine Anzahl zu lesender bytes vor und einen timeout und der Thread fährt dann fort, wenn die Daten gelesen oder die Zeit abgelaufen ist. Ich bin mittlerweile nicht mehr so sehr in der Thematik drin, da ich in letzter Zeit vorwiegend im Bereich Signal- und Bildverarbeitung unterwegs bin. Vielleicht schreibt ja noch einer der Cracks hier was dazu :)
type TSendThread= Class(TServerClientThread)
Procedure ClientExecute; override; function SendFile(fn: string):boolean; public MemoThread: Cardinal; processline: integer; request: string; replyhdr: string; fn: string; fsize: longint; starttime: longint; end; |
Re: Nonblocking/Threadblocking?
gibt es da nicht irgend wo ein tut eventuell zu.
Habe schon gegoogelt aber nichts gefunden. |
Re: Nonblocking/Threadblocking?
Liste der Anhänge anzeigen (Anzahl: 1)
Hi, als Tutorial mal meine Synchrone Serveranwendung.
Have a lot of fun! |
Re: Nonblocking/Threadblocking?
Zitat:
|
Re: Nonblocking/Threadblocking?
OK, die 1 ist klar:
damit im Fehlerfall (Klasse konnte nicht erstellt werden) die Variable NIL ist. Aber die 3 ist sinnlos, da entweder Exception und man kommt dort nie vorbei und wenn es dort vorbei kommt, dann wurde auf jeden Fall eine Klasse erstellt und zwar schon vor der Schleife. |
Re: Nonblocking/Threadblocking?
stimmt, (3) ist reichlich sinnfrei, aber frag mich nicht, was ich mir vor Jahren dabei gedacht hatte... vielleicht wars auch nur ein lustiger Versuch während der Fehlersuche, den ich danach nicht mehr rauskommentiert oder gelöscht habe. Vergiss die Zeile einfach.
es könnte aber auch etwas mit TCollection.Create und IDesignerNotify.Notification zu tun haben, dass da etwas asynchron abläuft. Hey, ich wollte nur ein paar Hinweise geben. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:01 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