thread stürzt ab - Zugriffsverletzung...



  • Hoi, nachdem ich jetzt den thread mehr oder minder am laufen habe bekomm ich beim aufruf eben diese Zugriffsverletzung wenn ich versuche in ein edit feld mmeiner form zu schreiben. das selbe passiert wenn ich versuche zu lesen!

    btw wie kann ich mir durch die funktion getRuns einen wert zurückgeben lassen? ich habe versucht es durch einen rückgabeparameter zu lösen aber dann meckert syncronize.

    "Zugriffsverletzung in Adresse 00444CC5 in Modul WinFuncTest.exe..."

    im code sieht das folgender maßen aus

    void __fastcall TBcdToIlTestThread::getRuns()
    {
           Form1->edRuns->Text = "600";
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TBcdToIlTestThread::Execute()
    {
         BYTE bcd[5];
         DWORD Il;
    
         int counter;
         int errorCnt = 0;
         int nGen;
         int retVal = BCD_OK;
         int nTimes = 0;
    
         Synchronize( getRuns);
         ...
    


  • Ist deine Form schon initialisiert ?
    Wo startest du den Thread?

    Gruß Rainer



  • die form ist schon initialisiert (man sieht sie, kann sie auch benutzen) der thread wird auf knofdruck resumed

    void __fastcall TForm1::btStartClick(TObject *Sender)
    {
         TBcdToIlTestThread *BcdToIlThread = new TBcdToIlTestThread( true );
    
         if( cbBcdToIl->Checked  )
         {
             BcdToIlThread->Resume();
         }
         ...
    


  • Und wenn du statt

    Form1->edRuns->Text = "600";
    

    mal schreibst

    SetWindowText(Form1->edRuns->Handle, TEXT("600"));
    

    ?
    Vielleicht macht auch diese globale Variable Form1 Ärger. Sonst mach dir doch mal ne Membervariable, die beim Aufruf von "new" mit dem this-Zeiger der TForm1-Klasse gefüllt wird. D.h., übergib deinem Thread den Form-Pointer. Das halte ich eh für besser als das Verwenden dieser globalen Variablen. Ich versuche stets, sie zu vermeiden.



  • habs gelöst lag daran das ich den thread by formcreate erstellt habe und erst mal in suspend mode geschickt hab. wenn ichs jetzt direkt beim aufruf mache funktioniert alles hervorragend!

    danke für die ratschläge


Anmelden zum Antworten