Problem mit Thread und darin enthaltene Befehle



  • Hallo,

    ich rufe in meinem Programm einen Thread per CreateThread() auf. Darin wird eine Datei runtergeladen und ganz am Ende des Threades, also bevor er endet und nachdem er die Datei fertig geladen hat, wird eine Funktion aufgerufen. Diese Funktion wertet die heruntergeladene XML-Datei aus. Allerdings gibt es hier den Fehler: Wenn das Programm den Befehl _di_IXMLDocument XML = LoadXMLDocument(L"./data/unterforen.xml"); erreicht, stürzt es mit dem Fehler "Unbekannter Softwarefehler ab.
    Wenn diese Funktion per Button->Click aufgerufen wird, klappt alles ganz normal, also liegt es an dem Thread, der die Funktion sozusagen ausführt.

    Wisst ihr, wie ich den Fehler umgehen kann ?

    Hier der Code:

    hherunterladen = CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)herunterladen, NULL, NULL, &threadID_herunterladen); 
    
    unsigned long WINAPI herunterladen()  
    {
    
    bla;
    
    Form1->XML_Unterforen();
    
    return 1;
    }
    
    void __fastcall TForm1::XML_Unterforen(void)
    {
    
        _di_IXMLDocument XML = LoadXMLDocument(L"./data/unterforen.xml");
    
    [...]
    }
    

    Danke,

    Tim



  • Wie ich das aseh', sprichst Du eine VCL- Komponente aus dem AThread heraus direkt an zum Laden/Anzeigen. Das darf bei einigen Komponenten nicht sein. Bau den Aufruf in eine parameterlose Funktion des Thread ein und rufe diese mit Synchronize(blablabla) auf.



  • Schau dir mal TThread an und die darin enthaltene Methode Synchronize().


Anmelden zum Antworten