Multithreading - Objekt geht verloren
-
verd**, ich hatte gehofft, das mit dem Multithreading halbwegs im Griff zu haben, aber offenbar habe ich noch ein paar Probleme:
//Hauptfunktion: MyFilter* pFilt = new MyFilter(); //einige Initialisierungen für pFilt AfxBeginThread(work,pFilt); //Arbeitsfunktion: UINT work(LPVOID param) { MyFilter* pFilt = (MyFilter*)param; ... }
(Wie man sieht, erstelle ich per new ein Objekt und will es dann in meiner Thread-Funktion verwenden)
Das Problem:
In der Hauptfunktion wird das Objekt ordnungsgemäß initialisiert. Allerdings hat das, was meine Thread-Funktion dann bekommt, überhaupt keine Ähnlichkeit mehr mit diesem Objekt - die Elemente sind teilweise mit 0 belegt, teilweise mit irgendwelchem Datenmüll (überprüft im Debugger - die angegebenen Adressen stimmen überein). Wie komme ich jetzt an meinen Filter heran?
-
Klingt seltsam. Und die Initialisierungen stimmen auch und erzeugen keinen Müll, Überlauf, oder so?
-
Ja, soweit ich das beurteilen kann - zumindest stehen unmittelbar vor dem BeginThread-Aufruf noch die richtigen Werte in meinem Filter.
-
Und wenn du schrittweise die Anzahl der zu initialisierenden Variablen erhöhst?
Also erst eine Variable erhöhen -> schauen, ob es im Thread richtig ist.
Dann eine zweite hinzunehmen, dann eine dritte, usw.
-
Schwierig - ein halb initialisiertes Objekt nützt weder dem Hauptprogramm noch der Thread-Funktion etwas.
*geht etwas testen*
Wenn ich einen int* übergebe, kommen die richtigen Daten an.
-
Du sollst ja nur überprüfen, ob die Variablen die Werte behalten.
Also, die Initialisierung ändern, Thread aufrufen, im Debugger die Werte anschauen, dann je nach ergebnis fortfahren. Nur zum Testen.
Ich vermute nämlich immer noch einen Überlauf.
-
Eine Teil-Initialisierung ist etwas schwierig, da ein großer Teil davon schon im Konstruktor der Basisklasse passiert.
*bastelt um*
Puh - ich glaube, ich hab' den Fehler gefunden - ich habe wohl die Polymorphie etwas überreizt (das Objekt war in einem IBaseFilter* untergebracht und dort war wohl eine Adressverschiebung drin).
-
Herzlichen Glückwunsch!