[wxWidgets / evtl verschieben] pause funktion ?



  • ja dass das Programm einfriert ist mir klar.....
    aber unter windows mit der Sleep Funktion passt alles nur usleep verhält sich anderes..

    um das einfieren zu verhindern kann ich auch das programm in mehrere threads zerlegen oder?



  • Hallo

    Ein zusätzlicher Thread reicht. Wenn das Schema ist "tue aller x Sekunden etwas" dann reicht auch ein wxTimer.

    bis bald
    akari


  • Mod

    Würde dir auch zu wxTimer raten. Damit kannst du eine Funktion alle x Sekunden aufrufen.



  • nur leider habe ich keine ahnung wie ich soetwas machen kann...
    kann mir da jemand auf die sprüung helfen?

    mfg


  • Mod



  • ja aber ich glaub in meinem Fall kann ich keine wxTimer verwenden...

    vector<double>* Communicate::insertion(Communicate *comm)
    {
        wxClientDC dc(m_rp);  //Context zur grafischen Ausgabe
    	vector<double>::iterator k,i,end,begin;
    	double v; //einzufuegendes Element
    	int anz = 1;
    
    	begin = pFeld->begin();
    	end   = pFeld->end(); // $end auf das Ende von $pFeld setzen
    
    	for(k = pFeld->begin(); k !=  end; k++) // Elemente der Reihe nach auswaehlen
    	{
    
    		v = *k; // $v auf aktuelles ($k-tes) Element setzen
    		i = k;
    
            m_lp->DrawVector(10,10,dc,pFeld); //Ausgabe des aktuellen Inhalts des vectors $pFeld
    
    		// ----- die $k-ten Elemente einfuegen ------------
    		while( i > begin && v < *(i-1) ) // Elemente nach rechts verschieben
    		{
    
    			*i = *(i-1);
    			i--;
    			m_lp->DrawVector(10,10,dc,pFeld); //Ausgabe des aktuellen Inhalts des vectors $pFeld
    		}
    
    		*i = v; //$k-tes Element an einfuegen
    		anz++;
    	}
        m_lp->DrawVector(10,10,dc,pFeld); //Ausgabe des aktuellen Inhalts des vectors $pFeld
    	return pFeld;
    }
    

    also mit DrawVector wird der aktuelle Inhalt des Vectors pFeld ausgegeben und in DrawVector wird das Programm für 1 s angehalten um die Werte betrachten zu können.....

    Aber wenn ich DrawVector per wxTimer nur jede Sekunde aufrufe wird ja währenddessen weitersortiert oder? und dann kann man den Sortierverlauf nicht mehr nachvollziehn (und das sollte der Sinn des Programms sein ;-))

    oder sehe ich das falsch, dass hier nur ein zusätzlicher Thread hilft?


  • Mod

    Hm, wieso nimmst du für das Zeichnen nicht einfach eine OnPaint methode?

    Dann könntest du einen Timer entsprechend setzten, der dann die Sortierung schrittweise vornimmt, und danach Refresh() aufruft, was die OnPaint auslöst.

    Sortierung und Ausgabe solltest du trennen, das ist einfach sauberer.



  • hm ja meinst du ich sollte DrawVector nicht im Sortierverfahren aufrufen?
    Ich denke ich weis was du meinst aber ich habe keine Ahnung wie ich das Sortierverfahren so zerstückeln soll, dass es immer nur einen Schritt sortiert und dann zurück springt.....

    aber am Wochenende werde ich mir sowieso wieder ein wxwidgets Buch zu Gemüte führen^^


  • Mod

    Du müsstest das Sortierverfahren halt so aufsplitten, das du bei jedem Funktions/Timeraufruf um eins weiter sortiert.

    Oder du sortierst in einem Thread, und schickst den Zustand dann jeweils mit einem Event an das Hauptfenster, bevor du für den Thread sleep aufrufst.



  • jup das mit dem Thread haut hin aber noch eine Frage zu DrawLine, die Paramter x und y werden ja vom linken oberen Punkt des Fensters aus gezählt, gibts eine einfache Möglichkeit, dass ich den linken unteren Punkt als Bezugspunkt wähle oder muss ich da umständlich die aktuelle Größe des Fenster herausfinden....?


  • Mod


Anmelden zum Antworten