aus einem thread auf formelement zugreifen
-
hi,
folgende problematik. ich habe einen thread von diesem aus möchte ich ein editfeld auslesen.
ich hab es schon mit Form1->meinEdit->Text versucht allerdings ohne erfolg. beim compilieren erhalte ich dann immer diese meldung:
[C++ Fehler] BcdToIlTest_thread.cpp(34): E2451 Undefiniertes Symbol 'Form1'
worin besteht mein denkfehler? kann ich beim aufruf meines thread das handle für die form mit übergeben?
gruß
ralf
-
Ist denn Form1 bekannt? Sprich: Ist die Headerfile der Klasse TForm1 im Thread inkludiert?
-junix
-
ok die .h war nicht inkludiert
jetzt gestaltet es sich nur so das der thread nicht komplett ausgeführt wird. sobald ich auf die form zugreife scheint er abgebrochen zu werden. hier mal der code des threads...
void __fastcall TBcdToIlTestThread::Execute() { BYTE bcd[5]; DWORD Il; int nTimes = 0; nTimes = StrToInt( Form1->edRuns->Text ); ShowMessage(AnsiString(nTimes)); ... }
setze ich das ShowMessage vor der abfrage wird mir die 0 ausgeben. ist das ShowMessage dahinter wie im beispiel wird der befehl nicht aufgerufen und nichts passiert. ne idee woran das liegen könnte? ich bekomme nämlich keine fehlermeldung oder etwas dergleichen während der laufzeit.
-
TThread::Synchronize ist immer mal wieder ein Blick wert (o;
-junix
-
so hab ich ja schon versucht. momentan schauts so aus
meine header
class TBcdToIlTestThread : public TThread { private: protected: void __fastcall Execute(); void __fastcall getRuns( int *nTimes ); public: __fastcall TBcdToIlTestThread(bool CreateSuspended); };
die thread unit
void __fastcall TBcdToIlTestThread::getRuns( int *nTimes ) { *nTimes = StrToInt( Form1->edRuns->Text ); } der aufruf Synchronize( getRuns( &nTimes ) );
da ich ja nTimes wissen will verwende ich halt nenen rückgabeparameter.
jetzt bekomme ich aber beim aufruf von:Synchronize( getRuns( &nTimes ) );
diese fehlermeldung:
[C++ Fehler] BcdToIlTest_thread.cpp(49): E2468 Ein Wert vom Typ void ist nicht zulässig.
[C++ Fehler] BcdToIlTest_thread.cpp(49): E2342 Keine Übereinstimmung des Typs beim Parameter 'Method' ('void (_fastcall * (_closure )())()' erwartet, 'void' erhalten)so langsam hab ich echt zuviel mit dem dinges...
-
Naja...
typedef void __fastcall (__closure *TThreadMethod)(void); void __fastcall Synchronize(TThreadMethod &Method);
Das heißt, du kannst in Synchronize nur einen Funktionsnamen vom Typ "void __fastcall [Funktionsname](void)" reinpacken. Und bitte OHNE PARAMETER - nur den Namen der Funktion.