Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TThread-Execute wird nicht ausgefürhrt warum ? (https://www.delphipraxis.net/26849-tthread-execute-wird-nicht-ausgefuerhrt-warum.html)

mimi 30. Jul 2004 10:38


TThread-Execute wird nicht ausgefürhrt warum ?
 
Hallo,
ich habe ein problem beim erzeugen von einem TThread Object.
so erzeuge ich ihn:
Delphi-Quellcode:
procedure TSound.TInit;
var
  t:TSoundWihle;
begin

  t:=TSoundWihle.Create(True);
  t.onE:=onE;
  t.Priority := tpLower;
  t.Resume;

end;

mein unit für das TThread-object:
Delphi-Quellcode:
unit wihle;

interface

uses
  Classes;

type
  TE = procedure of Object;
  TSoundWihle = class(TThread)
  private
    { Private-Deklarationen }
  protected

  public
    onE: TE;
    procedure Execute; override;
  end;

implementation


{ TSoundWihle }

procedure TSoundWihle.Execute;
begin
  while Terminated = True do begin
    onE;
  end;

end;

end.
problem ist:
ich muss ein ereignis immer ausführen damit in diesem ereignis checkPlay meiner sound unit ausgeführt werden kann.... warum wird jetzt Execute nicht ausgeführt?
TInit wird aufgerufen, nachdem die sound klass komplet geladen ist !!!

sakura 30. Jul 2004 10:40

Re: TThread-Execute wird nicht ausgefürhrt warum ?
 
Wie wäre es mit :?:
Code:
procedure TSoundWihle.Execute;
begin
  [color=#ff0000]while not Terminated do begin[/color]
    onE;
  end;

end;
...:cat:...

mimi 30. Jul 2004 10:51

Re: TThread-Execute wird nicht ausgefürhrt warum ?
 
keine änderung habe ich bekomme jetzt dafür beim beenden eine fehlermeldung:
Zitat:

---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt BreakOut.exe ist eine Exception der Klasse EOSError aufgetreten. Meldung: 'Systemfehler. Code: 5.
Zugriff verweigert'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
---------------------------
OK Hilfe
---------------------------
das problem ist excute wird noch nicht mal ausgeüfhrt !!!

Tyrael Y. 30. Jul 2004 10:51

Re: TThread-Execute wird nicht ausgefürhrt warum ?
 
Mal ne kleine Nebenfrage:

Muss man die property FreeOnTerminate nicht noch setzen?

Delphi-Quellcode:
procedure TSound.TInit;
var
  t:TSoundWihle;
begin

  t:=TSoundWihle.Create(True);
  t.onE:=onE;
  t.Priority := tpLower;
  t.OnTerminate := DoMyTerminate()      // <---
  t.FreeOnTerminate := True bzw. False; // <---
  t.Resume;

end;

ist ist sie standardmäßig false?

mimi 30. Jul 2004 11:03

Re: TThread-Execute wird nicht ausgefürhrt warum ?
 
jetzt bekomme ich beim beenden:
Code:
---------------------------
Anwendungsfehler
---------------------------
Exception EAccessViolation in Modul BreakOut.exe bei 00000000.

Zugriffsverletzung bei Adresse 00000000. Lesen von Adresse 00000000.


---------------------------
OK  
---------------------------
diesen fehler !!!

sakura 30. Jul 2004 11:08

Re: TThread-Execute wird nicht ausgefürhrt warum ?
 
Zitat:

Zitat von mimi
keine änderung habe ich bekomme jetzt dafür beim beenden eine fehlermeldung:

Was Du so keine Änderung nennst ;)

Dein Problem ist, daß Du den Thread mit Deiner Anwendung syncronieseren musst. Suche dazu mal nach Hier im Forum suchenSynchronize

...:cat:...

mimi 30. Jul 2004 11:23

Re: TThread-Execute wird nicht ausgefürhrt warum ?
 
kein beitrag konnte mir weiter helfen :(
kannst du mir ein beispiel schreiben, was mit Synchronize arbeitet ???
weil das habe ich auch aus Luckis tutor nicht richtig verstanden !!!!

dizzy 30. Jul 2004 13:46

Re: TThread-Execute wird nicht ausgefürhrt warum ?
 
Wenn du aus deinem Thread heraus auf Properties und Variablen eines anderen Threads (z.B. Controls auf dem Formular) zugreifst, so müssen diese Zugriffe synchronisiert werden. Die Zeilen die den Zugriff machen musst du in eine eigene Methode deiner Threadklasse packen, und mit Synchronize(MethodenName); aufrufen. Sonst kann es knallen.

gruss,
dizzy

mimi 30. Jul 2004 14:10

Re: TThread-Execute wird nicht ausgefürhrt warum ?
 
ich habs jetzt so gemacht:
Delphi-Quellcode:
procedure TSoundWihle.Execute;
begin
  while not Terminated do begin
    Synchronize(onE);
  end;

end;
nur jetzt hängt sich das progamm auf, und spielt die musik einfach weiter ab, macht aber sonnst nichts mehr :(

dizzy 30. Jul 2004 14:31

Re: TThread-Execute wird nicht ausgefürhrt warum ?
 
Ist auch logisch ;). Das Synchronized veranlasst, dass die Methode im Hauptthread der Anwendung ausgeführt wird! Deshalb kann man sich, so wie du es einsetzt, so alle Vorteile von einem Thread mit einem Schlag zu Nichte machen.
Du solltest INNERHALB deiner Methode alle Zugriffe die auf andere Threads passieren EINZELN Synchronized machen, nicht die ganze Methode!

Solche Synchronized-Aufrufe sollte man so sparsam wie möglich einsetzen, und im Zweifelsfall das Vorgehen im Thread überdenken, da er dir sonst nichts bringt.

:cheers:,
dizzy


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:05 Uhr.
Seite 1 von 2  1 2      

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