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.

Empfohlene Antworten

Veröffentlicht

Hallo,

ich habe noch nicht sehr viel mit SDI gearbeitet. Daher fehlt mir da etwas Erfahrung.

Mein Problem:

Ich möchte in meinem Projekt eine Progressbar und eine Uhr in die Status Leiste einbringen. Habe das auch alles schon hinbekommen, nur leider funktioniert das überhaupt nicht über einen Thread. Das heißt wenn ich die Uhr laufen lasse oder die ProgressBar, dann bleibt mir ja die Anwendung für den Zeitraum hängen. Ist mir Klar. Daher ja auch ein Thread...

Was ich nicht verstehe, ist das ich aus dem Thread nicht auf CMainFrame zugreifen darf. Habe schon alles mögliche versucht. Vielleicht seht Ihr ja den Fehler oder habt eine Lösung...

Wenn ich SendTextToStatusbar aufrufe geht es ja auch. Warum dann nicht aus dem Thread???


void CMyViewDlg::SendTextToStatusbar(int iIndex,CString csText)
{
((CMainFrame *)(theApp.m_pMainWnd))->SendTextToStatusbar(iIndex,csText);
}

bool CMyViewDlg::MyThreadControl()
{
DWORD pdwTimeThreadId;
LPVOID pParam;

pParam = (LPVOID)this;
m_hTimeThread = CreateThread(NULL,
0,
TimeThread,
pParam,
NULL,
&pdwTimeThreadId);

return true;
}


//Thread
DWORD WINAPI TimeThread(LPVOID pParam)
{
try
{
CMyViewDlg * pThis = (CMyViewDlg *) pParam ;


while(true)
{

pThis->SendTextToStatusbar (0, _T(_T(“Testâ€));
}
}
catch(CException *e)
{
char tmp[256];

e->GetErrorMessage(tmp, sizeof(tmp));

CString csTmp(tmp);


e->Delete();
}
catch(...)
{

}

return 0;
}



[/PHP]

Generell ist es nicht sicher, MFC-Methoden aus einem anderen Thread als dem, der das Fenster erstellt hat, aufzurufen. Es geht zwar oft gut (was hauptsächlich daran liegt, dass viele MFC-Methoden nur hauchdünne Wrapper um die WinAPI sind), aber manches eben nicht (z.B. UpdateData).

Im Zweifelsfall ist es immer besser, aus dem Thread eine Message an irgendein Fenster zu senden, und dort die gewünschte Aktion auszulösen.

Wie sieht denn CMainFrame::SendTextToStatusbar aus?

Habe das Projket noch aus anderen Aspekten verworfen und bin auf CDialog zurück.

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

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.