Ist das eine Multithreading Anwendung, wenn ...



  • ... eine Callbackfunktion von einen Audiotreiber aufgerufen wird ?

    Ich habe es als Singlethreaded kompiliert und es läuft, bin mir jedoch nicht sicher ob das so richtig ists.



  • Eine Callback-Funktion hat grundsätzlich erstmal nix mit Multithreading zu tun...



  • Bleibt dennoch die Frage ob Deine Clalback Funktion in Deinem Thread ausgeführt wird, oder von einem fremden Thread ausgeführt werden kann.
    Das kommt auf die Definition der Funktion an und die Arbeitsweise. Üblricherweise werden bei der Win32 API Clalback Funktionen in fast allen Fällen immer im selben Thread ausgeführt, der die Funktion aus setzt.



  • Die Callbackfunktion gehört zu meinem Thread, sie wird vom Audiotreiber der Soundkarte aufgerufen. Die Callbackfunktion wird also von einem anderen Thread aufgerufen. So sieht der Aufbau im Prinzip aus:

    void CALLBACK WaveInProc( HWAVEIN hwi, UINT uMsg, DWORD dwInstance,  
    							DWORD dwParam1,  DWORD dwParam2 )
    {
    ...	
    	case WIM_DATA:
    		SaveData ((WAVEHDR*)dwParam1); // Datenpuffer speichern.
    	break;
    ...
    }
    
    int main()
    {
    	...
    	getchar();	// Aufnahme stoppen.
    	...
    }
    


  • Hya!

    Probier das:

    void CALLBACK WaveInProc( HWAVEIN hwi, UINT uMsg, DWORD dwInstance,   
                                DWORD dwParam1,  DWORD dwParam2 ) 
    { 
    ...    
    puts ( "writing" );
          Sleep ( 3000 );
        case WIM_DATA: 
            SaveData ((WAVEHDR*)dwParam1); // Datenpuffer speichern. 
        break; 
        puts ( "done." );  
    ... 
    } 
    
    int main() 
    { 
        ... 
        getchar();    // Aufnahme stoppen. 
         puts("quit."); 
        ... 
    }
    


  • Mist, zu früh auf 'Absenden' geklickt 😃
    Hier die Fortsetzung:
    Sobald du "writing" siehts, hau auf die Entertaste.

    Vermutlich kommt dann "quit." vor "done." Dann verlierst du Daten.
    Ein Mutex und eine Wartefunktion WaitForSingleObject o.ä. ist dann angesagt.

    Gruß,
    B.B.


Anmelden zum Antworten