AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Thread execute wird nicht ausgeführt

Ein Thema von Lord_stelzer · begonnen am 16. Jul 2009 · letzter Beitrag vom 16. Jul 2009
Antwort Antwort
Seite 2 von 2     12
Lord_stelzer

Registriert seit: 24. Okt 2006
Ort: Hannover
13 Beiträge
 
#11

Re: Thread execute wird nicht ausgeführt

  Alt 16. Jul 2009, 15:34
joa sowas denk ich mir auch mittlerweile...
Ich will mit der Indy Komponennte TIdTCPClient Daten an einen Dazugehörigen Server schicken, allerdings ist dieser Server nicht immer an... und weil er weiterhin versuchen soll zu connecten (falls der Server wieder an geht) zieht das ganz schön Leistung und das Programm hängt... ich schreibe das Programm für einen Kumpel der ein Internetcafé betreibt nun möchte ich nach möglichkeit Rechnung der Preise und Zeit auch mit im Thread unterbringen...
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#12

Re: Thread execute wird nicht ausgeführt

  Alt 16. Jul 2009, 17:13
Zitat von Apollonius:
Und wer soll die Nachrichten für das Fenster bearbeiten? Das kann nur der Thread tun, der das Fenster erstellt hat. Und er braucht dazu eine Nachrichtenschleife.
Kannst du nicht irgendwas mal hinnehmen? Und wenn nicht dann schau selbst nach. Also nochmals: es spricht ncihts gegen den Timer, er ist nutzbar, auch ohne Fenster. Und da der Herr ja nicht schafft mal seine Behauptungen zu überprüfen sondern statt dessen immer neue aufstellt, hier mal noch ein paar Ausschnitte (c) by Embarcadero:

Delphi-Quellcode:
constructor TTimer.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);

  [...]
  FWindowHandle := Classes.AllocateHWnd(WndProc);
  [...]
end;

procedure TTimer.WndProc(var Msg: TMessage);
begin
  with Msg do
    if Msg = WM_TIMER then
      try
        Timer;
      except
        Application.HandleException(Self);
      end
    else
      Result := DefWindowProc(FWindowHandle, Msg, wParam, lParam);
end;
Was soll somit das ganze mit dem Thread zu tun haben? Ein Thread hat nicht automatisch eine Nachrichtenschleife geschweige denn ein Fensterhandle um etwas zu empfangen. Statt dessen musst du die WndProc beim anlegen des Fensters angeben, was - wie nun schon oft genug geäussert - vom TTimer geschieht. Was soll nun also der Thread damit zu schaffen haben?

Ich diskutiere hier nicht um den Sinn bzw. Unsinn eines TTimers in einem Thread, da man das in einem Thread besser handhaben kann (WaitMultipleObjects(), etc) sondern nur gegen deine Pauschale Aussage das TTimer hier nicht nutzbar ist, da kein Fenster zur Verfügung steht für selbigen. Und das ist immernoch eine in meinen Augen falsche Aussage deinerseits.

Also entweder überzeugst du dich selbst oder du stellst die nächste Behauptung in den Raum, warum das nicht funktionieren sollte ohne Fenster...
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#13

Re: Thread execute wird nicht ausgeführt

  Alt 16. Jul 2009, 17:24
Wo habe ich gesagt, dass der Thread ein eigenes Fenster braucht? Er braucht eine Nachrichtenschleife. Wer soll denn sonst auch die WndProc aufrufen? Danke übrigens für die Quellcode-Ausschnitte - ich bin schließlich nicht im entferntesten auf die Idee gekommen, mir die mal anzuschauen, bevor ich meine "Behauptungen" aufgestellt habe.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Lord_stelzer

Registriert seit: 24. Okt 2006
Ort: Hannover
13 Beiträge
 
#14

Re: Thread execute wird nicht ausgeführt

  Alt 16. Jul 2009, 17:38
es hat übrigens mit dem Timer auch so funktioniert mein Fehler lag im Main-Quelltext dass ich einer Variable im Thread einen Wert geben wollte bevor ich den Tread aufrufe xD
Ich habe nun allerdings ne schleife eingebaut und das Programm auch schon fertig es funktioniert genau so wie es soll
Für die die nach der schleife suchen so wie ich vorhin nochmal der code:

Delphi-Quellcode:
procedure TMain.Execute;
begin
while not Terminated do
Begin
  S := FormatDateTime('hh:nn:ss', Time);
  hour1:=strtoint(copy(S, 1, 2));
  min1:=strtoint(copy(S, 4, 2));
  sek1:=strtoint(copy(S, 7, 2));
  sekunden1:=hour1*3600+min1*60+sek1;
  time1:=Trunc(sekunden1-sTime);
  nTime:=timetostr(secondstotime(time1));
  synchronize(Update);
  
  sleep(1000);
  IdTCPClient.Host := GetIp(Host);
  IdTCPClient.Port := Port;
  try
  IdTCPClient.Connect(100);
  IdTCPClient.WriteLn(floattostr(time1));
  status := IdTCPClient.ReadLn('', 5);
  Form1.Label9.Caption:='Online';
  IdTCPClient.Disconnect;
  except
  Form1.Label9.Caption:='Offline';
  end;
  if status='shutdownthen WindowsExit(EWX_POWEROFF or EWX_FORCE);
end;
end;
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#15

Re: Thread execute wird nicht ausgeführt

  Alt 16. Jul 2009, 18:07
Zitat von Apollonius:
Wo habe ich gesagt, dass der Thread ein eigenes Fenster braucht? Er braucht eine Nachrichtenschleife.
Nein, die braucht nicht der Thread, die braucht das angelegte Fenster... :wall:
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#16

Re: Thread execute wird nicht ausgeführt

  Alt 16. Jul 2009, 18:14
Wie kann ein Fenster eine Nachrichtenschleife haben? Ein Fenster hat eine Fensterprozedur, und mit seiner Nachrichtenschleife ermöglicht ein Thread Windows, die Fensterprozeduren seiner Fenster aufzurufen. Der Hauptthread hat seine Nachrichtenschleife verteilt in den drei Methoden TApplication.Run/HandleMessage/ProcessMessage. Da aber der neu erstellte Thread Application.Run nicht aufruft, muss er anderweitig eine Nachrichtenschleife betreten.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#17

Re: Thread execute wird nicht ausgeführt

  Alt 16. Jul 2009, 18:16
Du hast Recht.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 23:11 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