Thread-Problem
-
Wie kann ich die Funktion mciSendString() in einem Thread benutzen?
Problem:wsprintf(cmd,"status Player position"); retVal=mciSendString(cmd, retval, 500, NULL);
retval ist immer 0, müsste aber millisekunden enthalten,
funktioniert alles korrekt wenn ich es direkt starte,
im thread aber nicht!Bitte um lösung des Problems
-
deine vermutung ist nicht richtig:
Return Values
Returns zero if successful or an error otherwise. The low-order word of the returned DWORD value contains the error return value. If the error is device-specific, the high-order word of the return value is the driver identifier; otherwise, the high-order word is zero. For a list of possible error values, see MCIERR Return Values.
To retrieve a text description of mciSendString return values, pass the return value to the mciGetErrorString function.
-
ich meine den 2.parameter
der muss die millisekunden enthalten!
-
aso
zeig mal den completten code
-
Hier den Quellcode:
void CXLinuxDlg::OnBnClickedButton4() { CWinThread* pThread = AfxBeginThread(getpos3,this,THREAD_PRIORITY_NORMAL); } UINT CXLinuxDlg::getpos3(LPVOID pParam) { CDialog* pDlg = (CDialog*)pParam; char cmd[500]; char retval[500]; DWORD retVal; int ms; int sek, sek2; int min, min2; int hours; while(1){ // Position in Milisekunden holen: wsprintf(cmd,"status Player position"); retVal=mciSendString(cmd, retval, 500, NULL); if (retVal!=0) { // Hat nicht geklappt! pDlg->SetWindowText("Unable to get position"); } // Ein bisschen rumrechnen: ms=atoi(retval); // Position in Millisekunden sek=ms/1000; // Milisekunden umgerechnet in Sekunden min=sek/60; // Die Sekunden umgerechnet in Minuten hours=min/60; // Die Minuten umgerechnet in Stunden sek2=sek-(hours*60)-(min*60); // Sekunden darf nicht größer als 60 sein.. // Das Ganze ins Stunden:Minuten:Sekunden Format bringen und in die Titelzeile schreiben: wsprintf(cmd,"%00i:%00i:%00i",hours,min,sek2); pDlg->SetWindowText(cmd); } return 0; }
-
Was bekommst du denn für einen Rückgabewert?
und kleiner tipp:
sek2=sek-(hours*60)-(min*60);stimmt nicht ganz
-
Die Millisekunden, die es schon läuft
-
was zeigt dir denn folgendes an?
retVal=mciSendString(cmd, retval, 500, NULL); MessageBox(0, retval, retval, 0);
-
retVal! retVal! retVal! retVal! retVal!
Return Values
Returns zero if successful or an error otherwise. The low-order word of the returned DWORD value contains the error return value. If the error is device-specific, the high-order word of the return value is the driver identifier; otherwise, the high-order word is zero. For a list of possible error values, see MCIERR Return Values.Ist sowieso eine schlechte Idee, den Rückgabewert (retVal) wie den returnString zu nennen. Siehst ja, was dabei für Mißverständnisse aufkommen