wxThread zu langsam?!?



  • hallo zusammen!

    ich sammele daten von einem a/d-wandler mit einer samplerate von 10k und pro durchgang 25 samples. wie zu erwarten ist bekomme ich 400 "daten sind vorhanden" ereignisse pro sekunde. um das datensammeln vom anschließenden darstellen auf dem bildschirm zu entkoppeln habe ich einen darstellungsthread erstellt, der in folgender schleife läuft:

    while(!TestDestroy()){
    		getSemaphore()->Wait();
    		datenDarstellen();
    	}
    

    beim datensammeln wird mit getSemaphore()->Post() der darstellungsthread aktiviert, allerdings erfolgt das darstellen nur ca. 100 mal pro sekunde.
    woher kommt diese diskrepanz und kann ich das irgendwie beschleunigen?

    danke!



  • ich habe noch ein wenig weiter getestet und mir eine kleine testklasse geschrieben (ich benutze wxWidgets 2.9.4):

    class TimeStopper {
    public:
    	void start(){
    		startTime = wxGetUTCTimeUSec();
    	}
    
    	void stop(wxString description, bool newLine = false){
    		stopTime = wxGetUTCTimeUSec(); 
    		span = stopTime - startTime;
    		OutputDebugString(description + _(": ") + span.ToString() + (newLine ? _("\n") : _(" | ")));
    		startTime = stopTime;
    	}
    
    	wxLongLong startTime, stopTime, span;
    };
    
    while(!TestDestroy()){
    		getSemaphore()->Wait();
    		stopper->stop(_("nach semaphore"));
    		datenDarstellen();
    		stopper->stop(_("nach zeichnen"), true);
    	}
    

    der output ist allerdings eigenartig:

    nach semaphore: 0 | nach zeichnen: 0
    nach semaphore: 20000 | nach zeichnen: 0
    nach semaphore: 0 | nach zeichnen: 0
    nach semaphore: 20000 | nach zeichnen: 0
    nach semaphore: 0 | nach zeichnen: 0
    nach semaphore: 20000 | nach zeichnen: 0
    

    usw...

    kann es wirklich sein, dass das zeichnen der daten weniger als eine millionstel sekunde dauert? oder ist die funktion wxGetUTCTimeUSec() auf windows nicht das was sie verspricht?
    und braucht windows vielleicht die 20/1000tel sekunden um den threadkontext zu wechseln? dann wäre nicht der semaphore das problem, sondern die dauer des kontextwechsels.

    hmmmm... ich hoffe, irgend jemand hat irgend ein idee?


Anmelden zum Antworten