einfaches thread
-
hätt ich nicht besser machen können
-
vielen dank ihr zwei
-
Pellaeon schrieb:
ich sags doch lass die Finger von Threads :p
der timer reicht hier vollkommen aus
Sorry aber: Was für ein Quatsch.
Dafür wurden Threads erschaffen.
Auch wenn ein Timer ausreicht bekommt man einen Timer nur wenn Zeit ist und das auch nur ca. alle 50ms.
Wenn aber aber diese SChleife ohne Pause abarbeiten will dann geht da nichts mit Timer.
Und im Timer dann die SChleife aufrufen macht genausowenig SInn wie der erste Code.
-
Er sollte ja auch nicht im Timer ne Schleife machen
-
Noch eine frage,
wie kann ich
UpdateData(FALSE);
bearbeite um ein editcontrovariable auf dem dialog zu updaten durch CountThread.
es liefert mir
Unzulässiger Aufruf einer nicht statischen MemberfunktionUINT CProgressControlDlg::CountThread2( LPVOID pParam ) { dokdok= i ; //UpdateData(FALSE); return 0; }
-
du brauchst einen Zeiger auf den Dialog, damit du die Methode aufrufen kannst
-
zeiger ist mein fachgebiet.
.................................wie bitte.
viellecht ein beispiel
-
UINT CProgressControlDlg::CountThread2( LPVOID pParam )
Da hast du einen Parameter, beim Starten des Threads übergibts du den Zeiger des aufrundenen Dialoges und hier in der Thread-Funktion castest du den void-Zeiger nach CDialog.
CDialog pDiag = (CDialog*)pParam;
-
UINT CProgressControlDlg::CountThread2( LPVOID pParam ) { CDialog pDiag = (CDialog*)pParam; dokdok= i ; pDiag.UpdateData(FALSE); return 0; }
kommt der fehler
: error C2440: 'Initialisierung': 'CDialog *' kann nicht in 'CDialog' konvertiert werden
-
ja hab den Stern vergessen muss natürlich
CDialog* pDiag = (CDialog*)pParam;
heißen
-
ok..
compiler beschwert sich nicht.
beim ausführen..fehler unbehandelte ausnahme
calling UpdateData before doModal
-
Dann startest du wohl deinen Extra-Thread bevor der Dialog schon richtige zustande kam. Solche Probleme gilt es halt zu lösen wenn man Threads benutzt ... .
-
was soll ich jetzt machen
-
Entweder doch den Timer versuchen *gg* oder du musst entsprechende Kontrollstrukturen einführen. Irgendwie kann man sowas z.B. mit CEvent steuern. Habe ich aber selber noch nicht benutzt. Musst dich also mal schlau machen wie die funktionieren.
-
also danke pelleeon.
ich denke ich schalte auf andrem thema.....web server anmelden .
muß paar sachen testen..
-
updatedata kann man nicht in einem thread aufrufen.
du musst aus dem thread direkt in das control schreiben.
-
Was man alles umgehen könnte, wenn man KEINEN Thread hier benutzt ... .
Wozu? Er will keine Berechnung die 10 min dauert, er will einfach das Fenster ein Stück verschieben. Da reicht der Timer. Und in OnTimer kann er dann auch bequem sein UpdateData aufrufen.
-
ich möchte daß jeder schritt im thread im dialog beschrieben durch ein variable heisst dokdok.
-
zum beispiel ich will in der mitte der thread auf dem dialog zeigen
"Prozess ist in der mitte".
dann brauche ich variable übergabe
-
Es ist egal was er will. Wenn er schon Threads verwenden muss/soll dann gleich richtig.
Es beginnt mit einer Funktion welche die Nachrichtenschleife blockiert. Bei einem Zähler mag ein Timer reichen. Du kannst aber nicht wissen was er noch einbaut. Vieleicht möchte er auch eine Buttonklick und nicht nur das Fenster verschieben (was ja das gleiche Problem ist (keine Nachrichten))
Um weitere Fragen in Zukunft zu vermeiden (wenn er z.B. dann doch 10 min Berechnen will) soll er lernen warum das mit den Threads so ist.
@docdoc.
Schau mal in die FAQ. Da habe ich eine Möglichkeit aufgezeigt einer Klasse von CWinthread einen this-zeiger auf den Dialog zu übergeben. Mit diesem kannst du dann im Dialog machen was du willst. (Außer UpdateData)