Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Eigenen event handler erstellen und zur Laufzeit zuweisen
Sibi - Do 08.04.04 16:23
Titel: Eigenen event handler erstellen und zur Laufzeit zuweisen
Hi Leute,
Ich glaube ich habe ein allgemeines Verständnisproblem mit event handlern. Was die ganzen Events betrifft welche man im Object Inspector von Delphi zuweisen kann, gibts es keine Probleme. Jetzt will ich aber einen event handler zur Laufzeit zuweisen.
Ein klein wenig Erläuterungen, damit man mein Problem besser versteht:
Irgentwo im Hauptthread meines Programmes spalte ich einen 2. Thread ab:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| var threadDBLoader: Thread_DBLoader;
begin threadDBLoader := Thread_DBLoader.Create(true); threadDBLoader.FreeOnTerminate := true; threadDBLoader.OnTerminate := DBLoaderNotifyEvent; threadDBLoader.dtStartTime := ...; threadDBLoader.Resume; end; |
Thread_DBLoader ist ein Object der Klasse TThread:
Delphi-Quelltext
1: 2:
| type Thread_DBLoader = class(TThread) |
Erreichen möchte ich damit folgendes:
Nach Beenden des abgespaltenen Threads soll das OnTerminate-Ereignis die Prozedur DBLoaderNotifyEvent ausführen (z.B. einfach nur eine Meldung ausspucken dass der Thread beendet ist).
Mein Problem betrifft nun genau diese DBLoaderNotifyEvent Prozedur. Ich habe keine Ahnung wo und wie ich diese Prozedur deklarieren und/oder implementieren muss :cry:
Hoffe da hat jemand mehr Erfahrung als ich...
Moderiert von
Motzi: Topic Verschoben
raziel - Do 08.04.04 19:04
:welcome:
du musst einfach eine Prozedur deklarieren, die exakt die gleichen Parameter hat wie diese "DBLoaderNotifyEvent" und diese Prozedur dann einfach .OnTerminate zuweisen.
raziel
Sibi - Fr 09.04.04 10:03
Ja danke,
ich habs inzwischen hin bekommen :D .
Ich hatte es Anfangs genau so gemacht, doch die Prozedur wurde nie aufgerufen. Das Problem lag aber darin dass ich meinen Thread in der letzten Anweisung mit EndThread() beendet habe. Irgentwie wird dieses OnTerminate Ereignis dann nicht ausgelöst, weiss der Geier weshalb :?:
Lässt man diese Anweisung weg, klappt es wie erwartet!
Besitzt man bei einem Thread eigentlich die Möglichkeit beim Beenden einen Rückgabewert an den Hauptthread zu übergeben. Es kann vorkommen dass die Anweisungen im 2. Thread nicht erfolgreich ausgeführt werden können (Datenbankzugriff usw...). In diesem Fall wäre es doch ganz sinnvoll wenn man eine Art Fehlercode an den Hauptthread weitergeben könnte.
Aus diesem Grund bin ich auch erst auf die Idee gekommen den Thread mit EndThread() + Fehlercode (EndThread(0), EndThread(-1),... je nachdem) abzuschliessen und den Fehlercode dann im Hauptthread auszulesen. Doch dann wird leider das onTerminate Ereignis nicht abgefeuert (zumindest scheint es so).
Kann man man das prinzipiell so machen??? Oder gibt es da Programmiertechniken von denen ich nach gar nichts weiss??? :wink:
na dann
Motzi - Fr 09.04.04 13:07
Ein Thread gibt einen Exit-Code zurück, über den kannst du deine Fehlercodes realisieren...
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!