Einzelnen Beitrag anzeigen

alzaimar
(Moderator)

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

Re: multithreading funktioniert nicht

  Alt 12. Jun 2007, 07:55
Zitat von Innos:
Delphi-Quellcode:
 type
  TBinFertig = procedure(const Content: String) of object;
  TMyOwnThread = class(TThread)
  protected
    MediaPlayer1: TMediaPlayer;
    CB1: TCheckBox;
    CB2: TCheckBox;
    CB3: TCheckBox;
    CB4: TCheckBox;
    procedure Execute; override;
...
procedure TMyOwnThread.Execute;
...
       if Form1.CB1.Checked=true then // geht auch... also diese Checkbox zu checken 0o
...
end;
Wieso deklarierst Du CB1..CB4 im Thread, greifst dann aber auf die CheckBoxen der Form1 zu? Hier ist das zwar gerade noch ok (weil lesend zugegriffen wird), aber ...
Form1.MediaPlayer1.Play ... hier knallts dann endgültig.

Zitat von Innos:
Delphi-Quellcode:
procedure TSilkroadOnlineTool.Button5Click(Sender: TObject);
var Thread: TMyOwnThread;
begin
 Thread := TMyOwnThread.Create(True);
 Thread.Resume;
  Thread.Suspend;
  Thread.Terminate;
  Thread.Execute;
end;
end.
Das stößt mir auf: Ich erzeuge einen Thread, wecke ihn kurz auf, lege ihn wieder schlafen, dann sage ich ihm, er soll sich beenden und rufe dann sogar die protected Methode 'Execute' auf. Das kann nicht gut gehen! Du sollst die Execute-Methode nicht anfassen, die geht dich nichts an. Sie ist nicht umsonst als 'protected' deklariert.

Wie startet man einen Thread?
a) Man ruft den Konstruktor mit dem Parameter 'False' auf (der steuert, ob der Thread bei der Geburt schläft oder gleich losbrüllt)
b) Man weckt ihn explizit mit 'Resume' oder 'Suspended := False' auf.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat