Verbesserung meiner threadfunktion



  • Habe einen Workflow, welcher den Zeitlichen ablauf von Event behinhaltet. Die Events sind als objekte in einer std::liste gespeichert, wobei jedes Event bzw. Element ein Variable "m_dDuration" auf das vorder hat!

    Mein thread nimmt immer das erste Element/Event der liste, zählt dessen zeit herunter, gibt den inhalt weiter) und löscht das element! und macht mit dem nächsten weiter

    bspw:

    <---A<---- B <---- C<---- D

    A,B,C,D sind events (elemente der liste, der Abstand "<---" Event m_dDuration)

    void MainThread::Run(){
    
    	//Jede Timeline durchlaufen...
    	long lDiff= timeGetTime();
    
    	Sleep(50);
    
    	m_Mutex.Acquire();	//Externer Workflowzugriff sperren
    
    	//Workflow verarbeiten
    	for(size_t i=0; i< WORKER_THREADS; ++i){
    
    		//Wenn Ressource (i) keine Allokationen enthält, dann überspringen
    		if(m_pData->m_pWorkflow[i].empty())
    			continue;
    
    		//Erste Allokation jeder Zeitlevectore begutachten
    		CTimeEvent &oAlloc = m_pData->m_pWorkflow[i].front();
    
    		//Wenn TimeEvent Gegenwärtig ist, dann elimieren
    		if(oAlloc.m_dDuration< 50){
    
    			//TimeEvent enthält Primärer Allocation
    			if((oAlloc.m_iFlags & 1) && oAlloc.m_vRelationship[0].second){
    				//------------------------------------------------------
    				m_Worker[i]->Resume(oAlloc.m_vRelationship[0].second); // Workerthread aktivieren!
    				TRACE("Start Alloc");
    				//------------------------------------------------------
    			}
    			//TimeEvent löschen
    			m_pData->m_pWorkflow[i].pop_front();
    		}
    		else
    			//Zeitlicher Abstand des nächsten TimeEvent runterzählen!
    			oAlloc.m_dDuration-=(timeGetTime()-lDiff);
    	}
    	//Laufzeit des Mainthreads
    	m_dStart+=((double)(timeGetTime()-lDiff))/1000;
    
    	m_Mutex.Release();	//Workflow entsperren
    
    }
    

    Die funktion funktioniert wunderbar, allerding nicht gerade genau.. wie könnte ich den aufruf der event genauer machen?


Anmelden zum Antworten