Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Worker Thread

Empfohlene Antworten

Veröffentlicht

Hallo Leute,

ich habe eine konkrete Frage bezüglich MFC mit Worker Thread. Also, ich habe einen Button „Go“, der viele Dingen macht, und ich möchte in ihm einen Thread aufrufen, der die Function getCurrentPosition braucht. Ich habe auch ein Static Text wo das Ergebnis dieser Function etwa alle 0.5s. angezeigt wird.

Daher brauche ich eine globale Function threadFunction.


UINT threadFunction (LPVOID lparam)

{

	Myclass* myobj = (Myclass *) lparam;

	CString status;

	if(myobj == NULL)

		return 1;

	else

{

	for (int i = 0; i < 10; i++)

	{

	 status = getCurrentPosition();

         myobj->posVar.SetDlgItemTextW (staticText,static_cast<LPCTSTR>(status));

        // posVar is control variable to the staticText

         }


}


	return 0;

}


Jetzt möchte ich diese Funktion von dem Button „Go“ aufrufen

void Myclass::OnBnClickedGo()

{

	Myclass* newObj = new Myclass;

	CWinThread *pThread = AfxBeginThread

		(threadFunction,newObj);

}

So weit so gut, aber wenn ich den Button „Go“ klicke, erscheint der unten stehenden Debug Fehler:

Debug Assertion Fehler

Line 154

Winocc.cpp

Und das ist passiert wenn das Porgram diese Linie probiert zu ausführen –

myobj->posVar.SetDlgItemTextW (staticText,static_cast<LPCTSTR>(status));

Ich habe viel versucht, aber bis jetzt hat noch nichts geklappt.

Hoffentlich hat jemand Idee wie ich das Problem lösen kann. :)

Bearbeitet von igurov

Workerthreads sollten nicht mit der Benutzeroberfläche interagieren. Generell darf nur der Thread auf ein Fenster zugreifen, der es auch erstellt hat.

Wenn dein Workerthread auf das UI zugreifen muss, sollte er das dem UI-Thread signalisieren, z.B. durch eine benutzerdefinierte Windows-Nachricht oder ein Event.

  • 3 Jahre später...

Hallo,

dies ist schon ein älterer Beitrag - aber ich habe ebenso diese Situation

wie ist "z.B. durch eine benutzerdefinierte Windows-Nachricht oder ein Event." umzusetzen?

Grüße

Hat funktioniert.

Danke!

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.