AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Nonblocking/Threadblocking?
Thema durchsuchen
Ansicht
Themen-Optionen

Nonblocking/Threadblocking?

Offene Frage von "_p_"
Ein Thema von _p_ · begonnen am 8. Jan 2005 · letzter Beitrag vom 19. Nov 2009
Antwort Antwort
Seite 2 von 2     12   
helgew

Registriert seit: 30. Jul 2008
125 Beiträge
 
#11

Re: Nonblocking/Threadblocking?

  Alt 30. Okt 2009, 14:15
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:
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;
im Thread selbst kann man dann WinSocketStreams bearbeiten. Es muss allerdings, wie vielleicht schon aus der Klassenbezeichung zu vermuten, eine eigene Threadklasse abgeleitet werden:

Delphi-Quellcode:
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;
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
  Mit Zitat antworten Zitat
Jackie1983

Registriert seit: 12. Mär 2007
486 Beiträge
 
#12

Re: Nonblocking/Threadblocking?

  Alt 30. Okt 2009, 14:42
gibt es da nicht irgend wo ein tut eventuell zu.
Habe schon gegoogelt aber nichts gefunden.
  Mit Zitat antworten Zitat
uoeb7gp
(Gast)

n/a Beiträge
 
#13

Re: Nonblocking/Threadblocking?

  Alt 13. Nov 2009, 18:34
Hi, als Tutorial mal meine Synchrone Serveranwendung.

Have a lot of fun!
Angehängte Dateien
Dateityp: rar syncsocket_971.rar (563,1 KB, 75x aufgerufen)
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#14

Re: Nonblocking/Threadblocking?

  Alt 13. Nov 2009, 19:32
Zitat von helgew:
Delphi-Quellcode:
// [...]
{1} SocketThread := nil;
{2} SocketThread := TSendThread.Create(true,ClientSocket); // create susepended
{3} while not assigned(SocketThread) do Application.ProcessMessages;
Kannst Du mir den Sinn von (1) und (3) erklären?
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.132 Beiträge
 
Delphi 12 Athens
 
#15

Re: Nonblocking/Threadblocking?

  Alt 13. Nov 2009, 19:38
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
helgew

Registriert seit: 30. Jul 2008
125 Beiträge
 
#16

Re: Nonblocking/Threadblocking?

  Alt 19. Nov 2009, 22:02
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 22:54 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz