SDL Fenster und threads ?!?



  • hallo alle!

    Ich bekomme es einfach nicht hin! Ich starte von einer dialoganwendung heraus das sdl fenster. ich will das das in einem eingenen thread läuft, läßt sich kompilieren, läuft aber nicht. hat jemand eine grundsätzliche idee was da gemacht gehört im Vergleich zu einem normalen c++ thread?!?

    danke schonmal...



  • 🙂

    Etwas mehr infos wären schon hilfreich..
    Verwendest Du die SDL-Threads? oder PThreads?

    Naja, jedenfalls gehört da schon einiges dazu.. Musst Dich ja evt. um die Synchronisation von Anwendungs-Thread und Grafik-Thread kümmern.



  • naja, ich verwende diesen thread. ich will eigentlich nur das ich während das sdl fenster offen ist, es auch bewegen kann. außerdem mache ich berechnungen in einer anderen Klasse im Dialog.

    PS: bewegen kann ich es eigentlich aber sobald ich bewege, bleibt das fenster weiß, der inhalt wird nicht neu gezeichnet...

    void Test::OnBnClickedStart()
    {
    
        CWinThread * Callback_Thread;
        Callback_Thread = AfxBeginThread(
    	      StartVigi, 
                  (LPVOID)this,                
                   THREAD_PRIORITY_NORMAL,   
                   0,                        
                   CREATE_SUSPENDED,         
                   NULL);               
    
    	//start thread
    	Callback_Thread->ResumeThread();
    


  • Hmm, Threads können Bauchschmerzen verursachen.

    Z.B. Der Thread der OpenGL-Grafik initialisiert ist auch der einzige, der dann OpenGL-Kommandos ausführen darf. Evt. ist das auch bei 2D-SDL das Problem..



  • ...ich nochmal!
    leider habe ich das selbe Problem noc immer. Auch wenn ich es ganz ohne seperaten thread mache ist es so das das sdl fenster (immoment mit rahmen) sehr "instabil" ist. ich zeichne alle 1.5 sec. etwas in das fenster, ich kann das fenster nicht bewegen und wenn ich mit der maus reinklicke = "no Response". Nur wenn ich einmalig etwas zeichne dann ist das fenster schön stabil und ich kann es auch moven.

    jemand eine idee was ich da falsch mache?
    Das ist der Fensteraufruf:

    if ( SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO) < 0 )
    	{
    		AfxMessageBox("Unable to init SDL Mode");
    		exit(1);
    	}
    
    screen = SDL_SetVideoMode(800,800,32,SDL_HWSURFACE|SDL_DOUBLEBUF);
    
    	if ( screen == NULL )
    	{
    		AfxMessageBox("Unable to set SDL video mode");
    		exit(1);
    	}
    

Anmelden zum Antworten