UpdateData aus Thread heraus?

ulmi

Mitglied
Hallo,

gibt es eine Möglichkeit die Funktion UpdateData() aus einem Thread heraus aufzurufen?

In meinem Falle starte ich einen Berechnungsthread, aus dem heraus ich UpdateData aufrufe um die Darstellung meines Dialoges anzupassen.

Ich kreiere Meinen Thread und rufe irgendwann
die Funktion "OnBnSelchangetriggercard()" auf

Code:
void CTriggerkartentestDlg::OnCbnSelchangetriggercard()
{
	if(running)
	{
		//alte werte sichern
		UpdateData(true);
		serial_sramio[auswahl]=val_eb_sramio;
		serial_ttreiber[auswahl]=val_eb_ttreiber;
                ,,,

Beim Aufruf von UpdateData bekomme ich im Debug-Modus eine "Debug Assertion Failed" Meldung, im Release-Modus passiert nichts.

Kann mir irgendwer einen Tip was ich verkehrt mache?


MfG U
 
Für den Thread benötigst du ja eine Thread-Funktion. An diese übergibst du dann die benötigten Variablen? Wie hast du denn den Berechnungsthread realisiert?
 
Für den Thread benötigst du ja eine Thread-Funktion. An diese übergibst du dann die benötigten Variablen?
Nein, da ich keine neue Klasse oder Instanz anlege, kann ich ja auf die Member zugreifen.
Wie hast du denn den Berechnungsthread realisiert?
Eingentlich nicht besonders ungewöhnlich.
Code:
hKartenTest=CreateThread((LPSECURITY_ATTRIBUTES) NULL, (DWORD) 0, (LPTHREAD_START_ROUTINE) KartentestThread, (LPVOID) this, (DWORD) 0, (LPDWORD) &KartTestThreadID);
Und die Funktion
Code:
unsigned long CTriggerkartentestDlg::KartentestThread(void* me)
{
	CTriggerkartentestDlg* ich=(CTriggerkartentestDlg*) me;
	try
	{
		ich->StartTest();
		//AfxMessageBox("XXX",MB_OK,0);
	}
	catch(...)
	{
		return 1;
	}
	return 0;
}
StartTest ruft dann eine endliche Funktion auf.
 
Die Implementierung ist eigentlich ganz ok. Es scheint also wirklich ein generelles Problem mit UpdateData() innerhalb von Threads zu geben.
Ich würde dir vorschlagen, OnCbnSelchangetriggercard() nicht im Thread aufzurufen, sondern eine eigene Message zu kreieren und damit via SendMessage() vom Thread aus diese Funktion zu starten.

Gruß
MCoder
 
Zurück