TThread



  • shit, habs die ganze zeit am falschen ort gesucht...

    habs jetzt gefunden unter Ansicht->Debug-Fenster->Aufruf-Stack

    hoffentlich ist es das richtige, bei mir sieht es jetzt so aus:

    http://shuto.gamersnet.ch/img/aufruf_stack.jpg



  • Genau das ist es... .hmmm keine Auffälligkeiten die ich grad so sehen würde....

    Ist es mit geringem aufwand möglich, die dynamischen Komponenten vorübergehend zu deaktivieren? Oft ist es wirklich so, dass irgendwas mit den dyn. Kompos schief läuft... eine andere Variante wäre: Greifst du irgendwo im Thread auf VCL-Kompos zu?

    -junix



  • also im thread greife ich nirgends auf die dyn. komponenten zu.

    ich hab einfach mal die funktion, in welcher die dyn. komponenten erstellt werden, auskommentiert, doch die Fehlermeldung am Schluss kam auch dann...



  • Auf Komponenten die du nicht dyn. erstellst greifst du aber zu oder wie?

    -junix



  • ja...

    ähm, jetzt kapier ich gar nichts mehr...

    hab vorher an einem andern problem, welches meiner ansicht nach überhaupt nichts mit dem Thread zu tun herumgebastelt und konnte das Problem beheben.

    Nun habe ich mein Programm ausgeführt und beim Beenden erscheint nun plötzlich keine Exception mehr !!! 😮

    Jedenfalls vielen Dank Junix, für deine Hilfe und die Zeit, welche du in mein Problem investiert hast.



  • Reine Neugierde meinerseits: Was für ein Problem war das?

    Btw: Wie greifst du auf die Kompos zu? Mittels Synchronize?

    -junix



  • Naja das Problem war eigentlich kein "richtiges" Problem. Ich habe nur in meiner StatusBar versucht, den 3. Panel wieder zu entfernen und die Position der ProgressBar in der StatusBar wieder zu ändern...

    Also ehrlich gesagt, glaube ich nicht, dass es daran gelegen hat^^

    Hmm Synchronize habe ich gar nie benutzt, also im Thread selber habe ich ganz normal auf die Komponenten zugegriffen wie sonst auch immer.

    z.B.

    Form->StatusBar->Panels->Items[0]->Width = 300;
    

    EDIT:

    dafür habe ich jetzt ein neues Problem 🙄

    Beim "OnTerminate"-Ereignis in meinem Thread rufe ich eine Funktion auf. In dieser Funktion wird irgendwann mal eine MessageBox aufgerufen. Aber die MessageBox erscheint gar nie, ich höre zwar den "Beep"-Ton, welcher erklingt wenn eine MessageBox erscheint, aber die MessageBox sehe ich nicht und mein Programm reagiert dann auch nicht mehr, weil es wohl wartet bis ich dort in der MessageBox (die ich nicht sehe) auf den OK-Button klicke.

    Also wenn ich die MessageBox aus dem Code entferne funktioniert alles bestens.



  • Gazmo: was steht im Codeskellett, wenn du einen neuen Thread mit dem Thread-Experten erstellst bezüglich Synchronize?

    Was die MessageBox betrifft, weiss ich auch grad keine Lösung, ausser das hald nicht der Thread eine MsgBox anzeigt sondern das UI (o;

    -junix



  • und wieder mal eine dumme frage; was meinst du mit dem thread-experten ?

    also einfach wenn ich auf Datei->Neu->Weiter klicke und dann das Thread-Objekt auswähle ?



  • genau



  • rofl jetzt kapiere ich was du gemeint hast:

    // Wichtig: Methoden und Eigenschaften von Objekten der VCL können nur
    // in Methoden verwendet werden, die Synchronize aufrufen, z.B.:
    //
    // Synchronize(UpdateCaption);
    //
    // wobei UpdateCaption so aussehen könnte:
    //
    // void __fastcall d::UpdateCaption()
    // {
    // Form1->Caption = "In Thread aktualisiert";
    // }

    hmm klingt interessant 😃
    das erklärt mir einiges 😉
    danke für den tipp, man bin ich ein 🤡

    mein glück, dass ich bisher nur einen thread verwendet habe...


Anmelden zum Antworten