Ich habe da ein kleines Problem mit meinem geliebtem Thema Threads...
ich habe einen Thread der bei ausführung eine Iteration ausführt, nun möchte ich diesen Thread aber auch gern beenden können bevor er damit fertig ist
Leider reagiert er nicht auf mein AfxEndThread(0); welches ich über eine Nachricht auslösen möchte, er ist wahrscheinlich zu sehr beschäftigt
Jetzt habe ich versucht in der Schleife eine Variablenabfrage zu implementieren (bei 1 mache weiter, bei 0 break-e bitte ab. Da das auch nicht funktionierte, rufe ich jetzt in der Schleife eine Funktion auf die mir den aktuellen Wert der Variable als int zurückgeben sollte. Das funktioniert auch soweit prima, zumindest wenn ich es aus dem Dialog aufrufe, rufe ich aus dem Thread die Funktion auf, ist die Variable nicht da...
Kurz ein Einblick in den Source:
int CPaintThread::StartPaint()
{
int i;
for(i = 0; i < 900; i = i++)
{
...mach was ...
// die statusvariable aus der funktion holen...
int paintStatus = ((SatellitentrackingDlg*)m_pParentDlg->FromHandle(m_pParentDlg->m_hWnd))->getPaintStatus();
if (paintStatus==0) {break;}
if (m_pParentDlg != NULL)
{
((SatellitentrackingDlg*)m_pParentDlg->FromHandle(m_pParentDlg->m_hWnd))->PaintSatellit(data, dataLength);
}
}
return 0;
}
//Die funktion die die Statusvariable zurückgibt
int SatellitentrackingDlg::getPaintStatus()
{
int test = paintStatus;
return(test);
}
Wenn ich paintStatus aus einer anderen Funktion (SatellitentrackingDlg) aufrufen, dann ist die Variable richtig gesetzt und funktioniert einwandfrei, aber aus CPaintThread klappt das nicht so recht,
Das ganze soll unter Windoofs mit C++/MFC geschehen.
Kann mir da vielleicht jemand helfen? Bin ein C++-Newbie
ich habe einen Thread der bei ausführung eine Iteration ausführt, nun möchte ich diesen Thread aber auch gern beenden können bevor er damit fertig ist

Leider reagiert er nicht auf mein AfxEndThread(0); welches ich über eine Nachricht auslösen möchte, er ist wahrscheinlich zu sehr beschäftigt

Jetzt habe ich versucht in der Schleife eine Variablenabfrage zu implementieren (bei 1 mache weiter, bei 0 break-e bitte ab. Da das auch nicht funktionierte, rufe ich jetzt in der Schleife eine Funktion auf die mir den aktuellen Wert der Variable als int zurückgeben sollte. Das funktioniert auch soweit prima, zumindest wenn ich es aus dem Dialog aufrufe, rufe ich aus dem Thread die Funktion auf, ist die Variable nicht da...

Kurz ein Einblick in den Source:
int CPaintThread::StartPaint()
{
int i;
for(i = 0; i < 900; i = i++)
{
...mach was ...
// die statusvariable aus der funktion holen...
int paintStatus = ((SatellitentrackingDlg*)m_pParentDlg->FromHandle(m_pParentDlg->m_hWnd))->getPaintStatus();
if (paintStatus==0) {break;}
if (m_pParentDlg != NULL)
{
((SatellitentrackingDlg*)m_pParentDlg->FromHandle(m_pParentDlg->m_hWnd))->PaintSatellit(data, dataLength);
}
}
return 0;
}
//Die funktion die die Statusvariable zurückgibt
int SatellitentrackingDlg::getPaintStatus()
{
int test = paintStatus;
return(test);
}
Wenn ich paintStatus aus einer anderen Funktion (SatellitentrackingDlg) aufrufen, dann ist die Variable richtig gesetzt und funktioniert einwandfrei, aber aus CPaintThread klappt das nicht so recht,
Das ganze soll unter Windoofs mit C++/MFC geschehen.
Kann mir da vielleicht jemand helfen? Bin ein C++-Newbie

Zuletzt bearbeitet: