AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Thread: Funktion am Ende wird nicht ausgeführt
Thema durchsuchen
Ansicht
Themen-Optionen

Thread: Funktion am Ende wird nicht ausgeführt

Ein Thema von BillieJoe90 · begonnen am 6. Apr 2007 · letzter Beitrag vom 7. Apr 2007
Antwort Antwort
Benutzerbild von BillieJoe90
BillieJoe90

Registriert seit: 29. Sep 2006
Ort: Bovenden
122 Beiträge
 
#1

Thread: Funktion am Ende wird nicht ausgeführt

  Alt 6. Apr 2007, 20:28
Hallo,
ich habe ein TThread-Objekt mit folgender Execute-Methode:
Code:
procedure TtrdRipAudioCD.Execute;
begin
 // [...] Hier steht sonst der Code zum Rippen eines Audio-Tracks von einer CD

  frmCopyFromCD.ripNextTrack(self.trackNr);
end;
Die Funktion frmCopyFromCD.ripNextTrack() sieht folgendermaßen aus:
Code:
procedure TfrmCopyFromCD.ripNextTrack(lastRippedTrack:Integer);
var i:Integer;
    anotherChecked,isChecked:Boolean;
begin
  anotherChecked := false;
  lastRippedTrack := lastRippedTrack+1;
  for i:=lastRippedTrack+1 to length(currentCD.songs) do begin
    sgrSongs.GetCheckBoxState(0, i, isChecked);
    if isChecked then begin
      ripAudioCD := TtrdRipAudioCD.Create(true);
      ripAudioCD.setTrackNr(i-1);
      ripAudioCD.setDrive(cbxDrives.ItemIndex);
      ripAudioCD.Resume;
      anotherChecked := true;
      break;
    end;
  end;

  if not anotherChecked then
    showMessage('Alle ausgewählten Tracks gerippt!');
end;
Diese Methode wird jedoch scheinbar nicht ausgeführt. Jedenfalls passiert nichts. Auch, wenn ich probeweise nur ein showMessage('blabla') ausführen lasse, passiert nichts. Wenn ich das Programm dann schließe, bekomme ich noch einen Fehler angezeigt "Error Code 1400 Ungültiges Fensterhandle". Über die Suche habe ich herausgefunden, dass das damit zusammenhängt, dass der Thread wohl nicht richtig beendet wurde.

Ich muss dazu sagen, dass die Variable "ripAudioCD" auch der aktuell ausgeführte Thread ist. Da dachte ich sofort, daran, dass ich ja versuche, ripAudioCD wider neu zu belegen, obwohl der Thread noch ausgeführt wird. Aber warum passiert dann selbst nichts, wenn ich NUR showMessage(), ohne andere Befehle, ausführen lasse?!

Ich hoffe, jemand kann mir helfen.

Danke schonmal!

Johannes
Johannes
Wenn Sie jetzt gleich bestellen, bekommen Sie ein zweites Set GRATIS!
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Thread: Funktion am Ende wird nicht ausgeführt

  Alt 6. Apr 2007, 22:42
Die VCL ist nicht threadsafe und das bekommst du mit deiner ShowMessage zu spüren. Nimm eine MessageBox und du solltest sie sehen. Zu deinem anderen Problem, was willst du eigentlich machen? Warum übergibst du dem Thread nicht gleich eine Liste der abzuarbeitenden Dateien?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von BillieJoe90
BillieJoe90

Registriert seit: 29. Sep 2006
Ort: Bovenden
122 Beiträge
 
#3

Re: Thread: Funktion am Ende wird nicht ausgeführt

  Alt 7. Apr 2007, 00:12
Zitat von Luckie:
Die VCL ist nicht threadsafe und das bekommst du mit deiner ShowMessage zu spüren. Nimm eine MessageBox und du solltest sie sehen. Zu deinem anderen Problem, was willst du eigentlich machen? Warum übergibst du dem Thread nicht gleich eine Liste der abzuarbeitenden Dateien?
Hmm... und zu deinem Vorschlag: Eigentlich hast du Recht. Ich wollte aber irgendwie für jeden Track einen seperaten Thread haben.

Ooh... Ich glaube, mir leuchtet da grad was ein: Wenn ich frmCopyFromCD.ripNextTrack() aufrufe, wird der Code quasi im Thread ausgeführt und nicht in frmCopyFromCD... D.h. ich muss den Code einfach nur in eine Synchronize-Methode einbauen...
Warum bin ich da nicht früher drauf gekommen?! Ich dachte, es wird ein Fehler angezeigt, wenn er nicht auf die VCL zugreifen kann

Naja... Vielen Dank - wieder eines der für mich zuerst völlig unlösbar scheinenden Probleme gelöst
Johannes
Wenn Sie jetzt gleich bestellen, bekommen Sie ein zweites Set GRATIS!
  Mit Zitat antworten Zitat
Antwort Antwort


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 09:36 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