<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Verbesserung meiner threadfunktion]]></title><description><![CDATA[<p>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 &quot;m_dDuration&quot; auf das vorder hat!</p>
<p>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</p>
<p>bspw:</p>
<p>&lt;---A&lt;---- B &lt;---- C&lt;---- D</p>
<p>A,B,C,D sind events (elemente der liste, der Abstand &quot;&lt;---&quot; Event m_dDuration)</p>
<pre><code class="language-cpp">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&lt; WORKER_THREADS; ++i){

		//Wenn Ressource (i) keine Allokationen enthält, dann überspringen
		if(m_pData-&gt;m_pWorkflow[i].empty())
			continue;

		//Erste Allokation jeder Zeitlevectore begutachten
		CTimeEvent &amp;oAlloc = m_pData-&gt;m_pWorkflow[i].front();

		//Wenn TimeEvent Gegenwärtig ist, dann elimieren
		if(oAlloc.m_dDuration&lt; 50){

			//TimeEvent enthält Primärer Allocation
			if((oAlloc.m_iFlags &amp; 1) &amp;&amp; oAlloc.m_vRelationship[0].second){
				//------------------------------------------------------
				m_Worker[i]-&gt;Resume(oAlloc.m_vRelationship[0].second); // Workerthread aktivieren!
				TRACE(&quot;Start Alloc&quot;);
				//------------------------------------------------------
			}
			//TimeEvent löschen
			m_pData-&gt;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

}
</code></pre>
<p>Die funktion funktioniert wunderbar, allerding nicht gerade genau.. wie könnte ich den aufruf der event genauer machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/194616/verbesserung-meiner-threadfunktion</link><generator>RSS for Node</generator><lastBuildDate>Tue, 29 Sep 2026 14:55:00 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/194616.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 09 Oct 2007 06:36:56 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Verbesserung meiner threadfunktion on Tue, 09 Oct 2007 06:46:28 GMT]]></title><description><![CDATA[<p>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 &quot;m_dDuration&quot; auf das vorder hat!</p>
<p>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</p>
<p>bspw:</p>
<p>&lt;---A&lt;---- B &lt;---- C&lt;---- D</p>
<p>A,B,C,D sind events (elemente der liste, der Abstand &quot;&lt;---&quot; Event m_dDuration)</p>
<pre><code class="language-cpp">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&lt; WORKER_THREADS; ++i){

		//Wenn Ressource (i) keine Allokationen enthält, dann überspringen
		if(m_pData-&gt;m_pWorkflow[i].empty())
			continue;

		//Erste Allokation jeder Zeitlevectore begutachten
		CTimeEvent &amp;oAlloc = m_pData-&gt;m_pWorkflow[i].front();

		//Wenn TimeEvent Gegenwärtig ist, dann elimieren
		if(oAlloc.m_dDuration&lt; 50){

			//TimeEvent enthält Primärer Allocation
			if((oAlloc.m_iFlags &amp; 1) &amp;&amp; oAlloc.m_vRelationship[0].second){
				//------------------------------------------------------
				m_Worker[i]-&gt;Resume(oAlloc.m_vRelationship[0].second); // Workerthread aktivieren!
				TRACE(&quot;Start Alloc&quot;);
				//------------------------------------------------------
			}
			//TimeEvent löschen
			m_pData-&gt;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

}
</code></pre>
<p>Die funktion funktioniert wunderbar, allerding nicht gerade genau.. wie könnte ich den aufruf der event genauer machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1380959</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1380959</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Tue, 09 Oct 2007 06:46:28 GMT</pubDate></item></channel></rss>