<?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[Probleme mit Thread]]></title><description><![CDATA[<p>Hi da draußen!</p>
<p>Ich habe folgendes Problem: In meinem Programm das eine Platine testen soll, habe ich zu beginn keinen Thread eingebaut gehabt, lief alles sehr langsam ab und man konnte dem Programm beim schreiben der Messwerte die von den Sensoren kamen fast zu sehen.<br />
Dann habe ich es auf einen Thread umgebaut, lief soweit auch ganz gut, alles ging etwas schneller, natürlich bremste die Hardware das ganze ein wenig. Also hab ich mir gedacht baust einen zweiten Thread ein der nur die Label's usw. schreibt (also die Oberfläche für den Benutzer aktualisiert), geht aber leider nicht, ab jetzt mach er gar nichts mehr, er hängt irgendwo.<br />
Warum ist das so??<br />
Stören sich die zwei Thread's gegenseitig so sehr?</p>
<p>Danke für Antworten,<br />
mfg Tom</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/115875/probleme-mit-thread</link><generator>RSS for Node</generator><lastBuildDate>Fri, 24 Jul 2026 15:08:21 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/115875.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 20 Jul 2005 06:40:11 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Probleme mit Thread on Wed, 20 Jul 2005 06:40:11 GMT]]></title><description><![CDATA[<p>Hi da draußen!</p>
<p>Ich habe folgendes Problem: In meinem Programm das eine Platine testen soll, habe ich zu beginn keinen Thread eingebaut gehabt, lief alles sehr langsam ab und man konnte dem Programm beim schreiben der Messwerte die von den Sensoren kamen fast zu sehen.<br />
Dann habe ich es auf einen Thread umgebaut, lief soweit auch ganz gut, alles ging etwas schneller, natürlich bremste die Hardware das ganze ein wenig. Also hab ich mir gedacht baust einen zweiten Thread ein der nur die Label's usw. schreibt (also die Oberfläche für den Benutzer aktualisiert), geht aber leider nicht, ab jetzt mach er gar nichts mehr, er hängt irgendwo.<br />
Warum ist das so??<br />
Stören sich die zwei Thread's gegenseitig so sehr?</p>
<p>Danke für Antworten,<br />
mfg Tom</p>
]]></description><link>https://www.c-plusplus.net/forum/post/834880</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/834880</guid><dc:creator><![CDATA[Tom7]]></dc:creator><pubDate>Wed, 20 Jul 2005 06:40:11 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Thread on Wed, 20 Jul 2005 06:45:10 GMT]]></title><description><![CDATA[<p>*zuck* hab meine drei rateversuche leider heute schon verspielt und ohne genauere infos wird das nix.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/834881</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/834881</guid><dc:creator><![CDATA[Sunday]]></dc:creator><pubDate>Wed, 20 Jul 2005 06:45:10 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Thread on Wed, 20 Jul 2005 07:22:03 GMT]]></title><description><![CDATA[<p>Ok:</p>
<p>vorher kein Thread -&gt; alles funktioniert aber sehr sehr langsam (Label's schreiben usw)</p>
<p>dann ein Thread -&gt; funktionierte auch gut aber war mir noch zu langsam</p>
<p>jetzt 2 Threads -&gt; nix funkt mehr</p>
<pre><code class="language-cpp">//Thread 1:
void __fastcall ControlProcess::Execute(){
  while(bLoop)
    ControlHWRead();
}
//---------------------------------------------------------
//Thread 2:
void __fastcall WriteProcess::Execute(){
  while(bLoopW)
    HardwareView-&gt;Write_Label();
}
</code></pre>
<p>Außerdem erhalte ich plötzlich die Fehlermeldung:</p>
<p>HRCHECK:<br />
'this-&gt;WriteByte(data, (long*)&amp;result)': Das Handle ist ungültig.<br />
<a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/869">@C</a>:\Programm Files\Borland\CBuilder6\Imports\CommXLib_TLB.h/665</p>
<p>Press [Y]es to terminate<br />
[N]o to continue<br />
[C]ancel to debug</p>
]]></description><link>https://www.c-plusplus.net/forum/post/834885</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/834885</guid><dc:creator><![CDATA[Tom7]]></dc:creator><pubDate>Wed, 20 Jul 2005 07:22:03 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Thread on Wed, 20 Jul 2005 07:41:44 GMT]]></title><description><![CDATA[<p>sorry, aber bei dem Code wird dir niemand helfen können.<br />
das muss schon etwas ausführlicher sein(vorallem die kritischen orte. zB wo sich das program aufhängt)</p>
<p>aktualisierst du die Label mit Synchronize()?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/834924</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/834924</guid><dc:creator><![CDATA[BigNeal]]></dc:creator><pubDate>Wed, 20 Jul 2005 07:41:44 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Thread on Wed, 20 Jul 2005 07:59:42 GMT]]></title><description><![CDATA[<p>Hallo Tom7,<br />
ich gebe auch mal einen Tipp ab. Bei Label fällt mir spontan ein &quot;Synchronize&quot;</p>
<pre><code class="language-cpp">void __fastcall TSendFunk::Execute()
{
	int			ret = 0;			// Fehlercode der Funktionen

	while (!Terminated)		// Endlos-Schleife des Thread
	{
		// Warten auf die Ereignisse
		ret	=	WaitForMultipleObjects(2, Fu1Event, False, INFINITE);

		// Ein Thread-Ereignis ist aufgetreten?
		switch (ret - WAIT_OBJECT_0)
		{
			case Thread_Event:
			{
				Synchronize(BearbeiteEreignis);	// Ereignis bearbeiten
			break; }
			// Thread beenden
			case Thread_End:	{
				Terminate();							// beenden des Thread
			break; }
			default:	{
				// Fehler in den Logfile schreiben
				ErrText-&gt;msgErrorExt
							(IDATNFUNK,
							IFEHLER,
							&quot;[TSendFunk::Execute]&quot;,
							&quot; Ein unbekanntes Ereignis ist aufgetreten!&quot;);
			break; }
		}			// Ende: switch (ret - WAIT_OBJECT_0)
	}				// Ende: while (!Terminated)
}					// Ende: Funktion

// Den Puffer der Funktegramme abfragen ob Daten vorhanden sind und
// senden wenn die Funkstrecke frei ist.
void __fastcall TSendFunk::BearbeiteEreignis(void)
{
........
{
</code></pre>
<p>Die Hilfe sagt dazu:<br />
&quot;Die Methode Synchronize führt innerhalb des VCL-Haupt-Threads einen Methodenaufruf aus.</p>
<p>typedef void __fastcall (__closure *TThreadMethod)(void);<br />
void __fastcall Synchronize(TThreadMethod &amp;Method);</p>
<p>Beschreibung</p>
<p>Synchronize löst den Aufruf einer bestimmten Methode aus, die vom VCL-Haupt-Thread ausgeführt werden soll. Durch dieses indirekte Verfahren werden Konflikte in Multithread-Anwendungen vermieden. Wenn Sie nicht sicher sind, ob ein Methodenaufruf Thread-sicher ist, rufen Sie die Methode vom VCL-Haupt-Thread aus auf, indem Sie sie an die Methode Synchronize übergeben.</p>
<p>Der Thread wird unterbrochen, während die angegebene Methode ausgeführt wird.&quot;</p>
<p>Viel Refolg<br />
evi48</p>
]]></description><link>https://www.c-plusplus.net/forum/post/834940</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/834940</guid><dc:creator><![CDATA[evi48]]></dc:creator><pubDate>Wed, 20 Jul 2005 07:59:42 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Thread on Wed, 20 Jul 2005 08:27:18 GMT]]></title><description><![CDATA[<p>ok:</p>
<p>in der ControlHWRead steht folgendes:</p>
<pre><code class="language-cpp">if(Hardware-&gt;bCOMPort==true){    //*1
    for(int i=0;i&lt;16;i++){
      Hardware-&gt;fTMP[i]=Hardware-&gt;ReadDigIn(i);
      Hardware-&gt;fPTC[i]=Hardware-&gt;ReadPT1000(i);
      Hardware-&gt;bRelais[i]=Hardware-&gt;ReadRelais(i);
      if(i&lt;8){
        Hardware-&gt;fRDA[i]=Hardware-&gt;ReadAnlgIn(i);
        Hardware-&gt;fANG[i]=Hardware-&gt;ReadAnlg(i);
      }
    }
    int temp=0;
    for(int i=0;i&lt;8;i++){
      if(HardwareView-&gt;CheckListBox1-&gt;Checked[i]==true)
        temp+=pow(2,i);
    }
    Hardware-&gt;SetRelais(0, temp);
    temp=0;
    for(int i=8;i&lt;16;i++){
      if(HardwareView-&gt;CheckListBox1-&gt;Checked[i]==true)
        temp+=pow(2,(i-8));
    }
    Hardware-&gt;SetRelais(1, temp);
  }
  else{
    for(int i=0;i&lt;16;i++)
      HardwareView-&gt;CheckListBox1-&gt;Checked[i]=false;
  }

//HardwareView-&gt;Write_Label(); sieht folgendermaßen aus:
TEdit* SMTText[16]={Edit1,Edit2,Edit3,Edit4,Edit5,Edit6,Edit7,Edit8,Edit9,
                      Edit10,Edit11,Edit12,Edit13,Edit14,Edit15,Edit16};
  TEdit* AInText[8]={Edit17,Edit18,Edit19,Edit20,Edit21,Edit22,Edit23,Edit24};
  TEdit* PTText[16]={Edit33,Edit34,Edit35,Edit36,Edit37,Edit38,Edit39,Edit40,
                      Edit41,Edit42,Edit43,Edit44,Edit45,Edit46,Edit47,Edit48};
  TLabel* RelaisStatusText[16]={Label82,Label83,Label84,Label85,Label86,Label87,
                                Label88,Label89,Label90,Label91,Label92,Label93,
                                Label94,Label95,Label96,Label97};
  TTrackBar* Regler[8]={TrackBar1, TrackBar2, TrackBar3, TrackBar4, TrackBar5,
                      TrackBar6, TrackBar7, TrackBar8};

    for(int i=0;i&lt;16;i++){
      SMTText[i]-&gt;Text=FloatToStr(Hardware-&gt;fTMP[i]);
      PTText[i]-&gt;Text=FloatToStr(Hardware-&gt;fPTC[i]);
      RelaisStatusText[i]-&gt;Caption=BoolToStr(Hardware-&gt;bRelais[i],true);
      if(i&lt;8){
        AInText[i]-&gt;Text=FloatToStr(Hardware-&gt;fRDA[i]);
        Hardware-&gt;SetAnlgOut(i,Regler[i]-&gt;Position);
      }
    }
</code></pre>
<p>nein die Label's werden wie oben stehend aktualisiert, das Problem ist nur, dass er sich bei</p>
<p>*1 teilweise, das heißt nicht bei jedem Programmstart aufhängt und sich auch Code-Guard mit der Fehlermeldung &quot;Attempt to access 1 byte&quot; meldet.</p>
<p>Ich glaub dass es an dem liegt denn dadurch glaub ich führt er den Thread nicht weiter aus, zumindest siehts beim debuggen so aus.</p>
<p>Weiters werden die Label eben nicht aktualisiert, wobei keiner der beiden Thread's ausgeführt wird, obwohl ich im Konstruktor meines Hauptfensters foldendes stehen habe:</p>
<pre><code class="language-cpp">CProcess=new ControlProcess(false);
  CWProcess=new WriteProcess(false);
  Hardware=new THardware();
</code></pre>
<p>müsste doch eigentlich so wies mir gezeigt worden ist die Thread's initialisieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/834942</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/834942</guid><dc:creator><![CDATA[Tom7]]></dc:creator><pubDate>Wed, 20 Jul 2005 08:27:18 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Thread on Wed, 20 Jul 2005 08:35:25 GMT]]></title><description><![CDATA[<p>hab gerade eine neue Entdeckung gemacht, wenn ich beim debuggen einen Haltepunkt in die while Schleife im Thread der die Hardware abfragt reingebe, funktioniert das Programm fast, die Label's werden aktualisiert usw. nur kann ich dem Programm jetzt nur noch zu schauen und den Ablauf selber nicht mehr beeinflussen, das heißt ich kann kein Relais mehr setzen o.ä.</p>
<p>bin schlicht weg ratlos,<br />
tom</p>
]]></description><link>https://www.c-plusplus.net/forum/post/834982</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/834982</guid><dc:creator><![CDATA[Tom7]]></dc:creator><pubDate>Wed, 20 Jul 2005 08:35:25 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Thread on Wed, 20 Jul 2005 09:16:27 GMT]]></title><description><![CDATA[<p>Tom7 schrieb:</p>
<blockquote>
<p>bin schlicht weg ratlos,</p>
</blockquote>
<p>Die Ratschläge schon gelesen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/835039</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/835039</guid><dc:creator><![CDATA[junix]]></dc:creator><pubDate>Wed, 20 Jul 2005 09:16:27 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Thread on Wed, 20 Jul 2005 09:21:21 GMT]]></title><description><![CDATA[<p>ja hab ich, hat aber auch nix genutzt der zweite Thread arbeitet trotzdem nicht</p>
]]></description><link>https://www.c-plusplus.net/forum/post/835044</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/835044</guid><dc:creator><![CDATA[Tom7]]></dc:creator><pubDate>Wed, 20 Jul 2005 09:21:21 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Thread on Wed, 20 Jul 2005 11:46:16 GMT]]></title><description><![CDATA[<p>Hallo Tom7,<br />
hast du die Prioritäten der beiden Thread verändert?<br />
Laufen beide Thread ungebremst in einer While-Schleife?<br />
Hast du die Möglichkeit an deinem Hardware-&gt;bCOMPort einen Trigger zu setzen der dir dann den Thread für einen Lesezyklus startet?<br />
Kannst du über einen Timer oder die Wait-Funktion von TEvent den Hardware-Thread mit einer bestimmten Frequenz für einen Lesezyklus starten?</p>
<p>Tut mir leid daß ich nur Fragen stelle, aber das fällt mir Momentan ein um eventuell den Fehler einzukreisen. Du schreibs mit einem Haltepunkt in der While-Schleife funktioniert was. Ich glaube es handelt sich um ein zeitliches Problem. Zeigst du die Daten nur in der Oberfläche an oder speicherst du die Messdaten auch auf der Festplatte?</p>
<p>evi48</p>
]]></description><link>https://www.c-plusplus.net/forum/post/835218</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/835218</guid><dc:creator><![CDATA[evi48]]></dc:creator><pubDate>Wed, 20 Jul 2005 11:46:16 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Thread on Wed, 20 Jul 2005 12:05:59 GMT]]></title><description><![CDATA[<p>Ja ich noch mal,<br />
frag doch die Messdaten auf Änderungen ab und gib nur die veränderten Werte aus.</p>
<p>evi48</p>
]]></description><link>https://www.c-plusplus.net/forum/post/835234</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/835234</guid><dc:creator><![CDATA[evi48]]></dc:creator><pubDate>Wed, 20 Jul 2005 12:05:59 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Thread on Wed, 20 Jul 2005 12:09:11 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/1167">@evi48</a></p>
<p>danke erst mal für deine Hilfe, zu deine Fragen:<br />
hast du die Prioritäten der beiden Thread verändert?<br />
bis jetzt hab ich nicht mal gewusst wie das geht, werd aber gleich in der Hilfe nachlesen</p>
<p>Laufen beide Thread ungebremst in einer While-Schleife?<br />
so hätte ich es Anfangs probiert, ist aber nicht gegangen, irgendwie eh logisch, die blockieren sich wahrscheinlich ohne die Prioritäten gegenseitig</p>
<p>Hast du die Möglichkeit an deinem Hardware-&gt;bCOMPort einen Trigger zu setzen der dir dann den Thread für einen Lesezyklus startet?<br />
nein hab ich nicht, denn ich darf an der HW nix als funktionierend annehmen da es ein Programm werden soll dass es dem Techniker ermöglicht die Platine zu testen<br />
Kannst du über einen Timer oder die Wait-Funktion von TEvent den Hardware-Thread mit einer bestimmten Frequenz für einen Lesezyklus starten?<br />
das mit der Frequenz könnte u.U gehen, da die Hardware im vergleich zum Programm am PC eh relativ lahm ist, ist halt nur ein 16Mhz µC</p>
<p>Tut mir leid daß ich nur Fragen stelle, aber das fällt mir Momentan ein um eventuell den Fehler einzukreisen. Du schreibs mit einem Haltepunkt in der While-Schleife funktioniert was. Ich glaube es handelt sich um ein zeitliches Problem. Zeigst du die Daten nur in der Oberfläche an oder speicherst du die Messdaten auch auf der Festplatte?<br />
dieses Problem konnte ich mittlerweile schon lösen -&gt; ich Dödel hab den Thread vor der Hardware erstellt, kann ja nicht gehn -&gt; war wirklich ein zeitliches Problem, jetzt funkt das aber, auch die Labels werden mittlerweile mit Synchronize erstellt, allerdings folgendermaßen:</p>
<pre><code class="language-cpp">//---------------------------------------------------------------------------
void __fastcall ControlProcess::Execute(){
  while(bLoop){
    Control();
    Synchronize(UpdateLabel);
  }
}
//---------------------------------------------------------------------------
void __fastcall ControlProcess::UpdateLabel(void){
  HardwareView-&gt;Write_Label();
}
//---------------------------------------------------------------------------
</code></pre>
<p>ist halt wieder im gleichen Thread aber wenigstens gehts fehlerfrei, jetzt muss ich nur noch den 2.Thread hinbekommen.</p>
<p>mfg<br />
Tom</p>
]]></description><link>https://www.c-plusplus.net/forum/post/835239</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/835239</guid><dc:creator><![CDATA[Tom7]]></dc:creator><pubDate>Wed, 20 Jul 2005 12:09:11 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Thread on Wed, 20 Jul 2005 12:14:50 GMT]]></title><description><![CDATA[<p>Ich habe noch mal in meinen Prgrammen gestöbert hier ein kurzez Beispiel für WaitFor von TEvent:</p>
<pre><code class="language-cpp">// Der Thread ist aufgebaut als eine Endlosschleife, die durch den
	// Funktionsaufruf &quot;WaitFor&quot; der Klasse TEvent unterbrochen wird.
	// Die Schleife wird wieder fortgesetzt, wenn ein Ereignis fuer
	// &quot;OnStatusExecute&quot; gesetzt wird oder der Timeout abgelaufen ist.
	OnStatusExecute	= new TEvent(
				NULL,		// Zugriffsrechte und Vererbungsmoeglichkeiten
				false,   // automatisch zurueckgesetzen
				false,   // TEvent-Objekt mit rueckgesetztem Signal erzeugen
				&quot;&quot;);		// Name eines Windows-Ereignisobjekts

void __fastcall TParallelIO::Execute()
{
	char	cMessage[255];

	while (!Terminated) {		// Endlos-Schleife des Thread

		// Warten auf das Ereignis. Nach Ablauf von zwei Sekunden wird der
		// Time-Out ausgelöst.
		if ((OnStatusExecute-&gt;WaitFor (TREADTIMEOUT)) != wrTimeout)
		{
			// Fehlermeldung ausgeben
			sprintf(cMessage,
					  &quot;[TParallelIO::Execute]&quot;
					  &quot; Fehler im Thread Fehler-Nr.: %d&quot;,
					  OnStatusExecute-&gt;LastError);
			IOPort-&gt;msgErrorExt(
					ICONTROL_PANEL,
					IFEHLER,
					&quot;&quot;,
					cMessage);
		}else
		{
			Synchronize(EinlesenIOPort);	// Ereignis bearbeiten
		}	// Ende: if ((OnStatusExecute-&gt;WaitFor (TREADTIMEOUT))
			//																!= wrSignaled)
	}	 	// Ende: while (!Terminated)
}
</code></pre>
<p>evi48</p>
]]></description><link>https://www.c-plusplus.net/forum/post/835243</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/835243</guid><dc:creator><![CDATA[evi48]]></dc:creator><pubDate>Wed, 20 Jul 2005 12:14:50 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Thread on Wed, 20 Jul 2005 12:20:36 GMT]]></title><description><![CDATA[<p>genau das ist's ja die ändern sich dauernd, und für die 2 oder 3 die wirklich konstant sind lohnt sich der Aufwand nicht</p>
]]></description><link>https://www.c-plusplus.net/forum/post/835248</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/835248</guid><dc:creator><![CDATA[Tom7]]></dc:creator><pubDate>Wed, 20 Jul 2005 12:20:36 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Thread on Wed, 20 Jul 2005 12:45:49 GMT]]></title><description><![CDATA[<p>Hallo Tom7,<br />
ja da bin ich mir nicht so sicher, dass sich der Auffwand nicht lohnt. Ich mußte leider in einem Projekt feststellen, dass ich bei einer Anzeigefrequenz von 20Hz Schiffbruch erlitten habe. Bei 10Hz ging es noch so, dass ich auch noch Eingaben machen konnte. Ist sicher auch abhängig vom Prozessor aber die Ausgabe unter Windows kostet leider viel Zeit. Eine Abtastung von 100Hz war kein Problem wenn die Anzeige nicht gewesen wäre.</p>
<p>Ist es denn möglich, dass du für die gewonnen Messwerte Grenzwertüberschreitungen (nach unten und nach oben) anzeigst und nur auf wunsch des Benutzers den gemessenen Wert anzeigst so als eine Art Protokoll?</p>
<p>evi48</p>
]]></description><link>https://www.c-plusplus.net/forum/post/835272</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/835272</guid><dc:creator><![CDATA[evi48]]></dc:creator><pubDate>Wed, 20 Jul 2005 12:45:49 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Thread on Wed, 20 Jul 2005 12:51:08 GMT]]></title><description><![CDATA[<p>du meinst so eine Art, Hysterese???</p>
<p>Wenn sich der Wert innerhalb einer Grenze bewegt bleibt der gleiche Wert stehen??</p>
]]></description><link>https://www.c-plusplus.net/forum/post/835281</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/835281</guid><dc:creator><![CDATA[Tom7]]></dc:creator><pubDate>Wed, 20 Jul 2005 12:51:08 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Thread on Wed, 20 Jul 2005 21:50:46 GMT]]></title><description><![CDATA[<blockquote>
<p>In meinem Programm das eine Platine testen soll, habe ich zu beginn keinen Thread eingebaut gehabt</p>
</blockquote>
<p>Kannst du mir mal genauer erklären, was für eine Platine, welcher Controller<br />
befindet sich darauf,was soll getestet werden, welche Kommunikation findet mit dem PC statt, wie<br />
hoch soll die Samplerate sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/835336</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/835336</guid><dc:creator><![CDATA[hermes]]></dc:creator><pubDate>Wed, 20 Jul 2005 21:50:46 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Thread on Thu, 21 Jul 2005 06:12:31 GMT]]></title><description><![CDATA[<p>Hallo guten Morgen,<br />
da bin ich wieder.</p>
<p>Ich meine mit Grenzwert du hast einen Messwert der sich zum Beispiel in dem Bereich -10 bis +8 bewegen darf. Im einfachsten Fall der Anzeige hast du z.B. ein TPanel welches die Farbe clGreen hat wenn der Messwert in diesen Grenzen liegt außerhalb der Genzen clRed. Zusätzlich hast du ein Label in dem du die Messwerte ausgibst wenn der Benutzer das wünscht z.B. Ausgabe der Werte durch Click auf einen Button.</p>
<p>So wie ich das verstanden habe handelt es sich bei deinem Programm um ein Testtool. Da ist es doch für QM sicher hilfreich zum Abschluß des Test die Messwerte auszudrucken.</p>
<p>evi48</p>
]]></description><link>https://www.c-plusplus.net/forum/post/835404</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/835404</guid><dc:creator><![CDATA[evi48]]></dc:creator><pubDate>Thu, 21 Jul 2005 06:12:31 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Thread on Thu, 21 Jul 2005 06:15:32 GMT]]></title><description><![CDATA[<blockquote>
<p>Kannst du mir mal genauer erklären, was für eine Platine, welcher Controller<br />
befindet sich darauf,was soll getestet werden, welche Kommunikation findet mit dem PC statt, wie<br />
hoch soll die Samplerate sein.</p>
</blockquote>
<p>Also, guten Morgen vorerst mal.<br />
Die Platine ist von unserer Firma, genauer gesagt von meinem Vorgänger selbst entwickelt und beherberg einen µC509.<br />
Die Platine hat 16 Relais 16 Digitale Eingäge, 8 Analoge Eingägne, 8 Analoge Ausgänge + nochmal 16 digitale Eingänge.<br />
Das ganze kann über 2 verschiedene Protokolle angesprochen werden die sich in der Syntax komplett voneinander unterscheiden (Protokolle sind auch selbst entwickelt).<br />
Die Kommunikation findet entw. über CAN oder COM statt.</p>
<p>Beantwortet das deine Fragen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/835429</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/835429</guid><dc:creator><![CDATA[Tom7]]></dc:creator><pubDate>Thu, 21 Jul 2005 06:15:32 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Thread on Thu, 21 Jul 2005 06:29:01 GMT]]></title><description><![CDATA[<p>evi48 schrieb:</p>
<blockquote>
<p>Eine Abtastung von 100Hz war kein Problem wenn die Anzeige nicht gewesen wäre.</p>
</blockquote>
<p>...weshalb man ja auch Anzeige und Datenspeicher u.U. trennen sollte? (-&gt;Model-View-Controller-Modell). Ich denke ja nicht, das du eine 100Hz Update-Frequenz der Anzeige erreichen wolltest oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/835435</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/835435</guid><dc:creator><![CDATA[junix]]></dc:creator><pubDate>Thu, 21 Jul 2005 06:29:01 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Thread on Thu, 21 Jul 2005 06:29:47 GMT]]></title><description><![CDATA[<p>evi48 schrieb:</p>
<blockquote>
<p>Hallo guten Morgen,<br />
da bin ich wieder.</p>
<p>Ich meine mit Grenzwert du hast einen Messwert der sich zum Beispiel in dem Bereich -10 bis +8 bewegen darf. Im einfachsten Fall der Anzeige hast du z.B. ein TPanel welches die Farbe clGreen hat wenn der Messwert in diesen Grenzen liegt außerhalb der Genzen clRed. Zusätzlich hast du ein Label in dem du die Messwerte ausgibst wenn der Benutzer das wünscht z.B. Ausgabe der Werte durch Click auf einen Button.</p>
<p>So wie ich das verstanden habe handelt es sich bei deinem Programm um ein Testtool. Da ist es doch für QM sicher hilfreich zum Abschluß des Test die Messwerte auszudrucken.</p>
<p>evi48</p>
</blockquote>
<p>Das mit den Bereichen ist an und für sich eine gute Idee, nur wenn beim Kunden eine Platine eine Fehler hat und diese getestet werden soll, verbinde ich einfach die analog Ausgänge und die analog Eingänge -&gt; ergo Ich weiß durch meine eigene Einstellung was rauskommen muss. Aber das mit dem Protokoll und dem in die Datei speichern wäre viell. keine schlechte Idee</p>
]]></description><link>https://www.c-plusplus.net/forum/post/835436</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/835436</guid><dc:creator><![CDATA[Tom7]]></dc:creator><pubDate>Thu, 21 Jul 2005 06:29:47 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Thread on Thu, 21 Jul 2005 06:46:26 GMT]]></title><description><![CDATA[<p>Eine Frage hab ich allerdings noch:</p>
<p>Das Programm läuft jetzt, aber eben nur in einem Thread:</p>
<pre><code class="language-cpp">void __fastcall ControlProcess::Execute(){
  while(bLoop){
    Control();
    Synchronize(UpdateLabel);
  }
}
</code></pre>
<p>wenn ich aber nun wie mir gesagt wurde die Prioritäten hinzufüge und 2 Thread's erzeuge funkt's nicht mehr, ich hab das so gelöst:</p>
<pre><code class="language-cpp">void Construct_All(void){
  Hardware=new THardware();
  CProcess=new ControlProcess(true);//Thread erstellen, nicht ausführen
  WProcess=new WriteProcess(true);
  CProcess-&gt;Priority=tpNormal;   //niedrigere Priorität
  WProcess-&gt;Priority=tpLower;
  CProcess-&gt;Resume(); //Thread startet jetzt
  WProcess-&gt;Reusme();
}
</code></pre>
<p>müsste doch eigentlich stimmen oder?<br />
wenn ich das programm starte tut sich gar nix, es wird zwar der CProcess Thread gestartet aber nicht der WProcess.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/835442</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/835442</guid><dc:creator><![CDATA[Tom7]]></dc:creator><pubDate>Thu, 21 Jul 2005 06:46:26 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Thread on Thu, 21 Jul 2005 07:27:39 GMT]]></title><description><![CDATA[<p>Hallo Junix,<br />
nein natürlich nicht mit 100Hz anzeigen so schnell kann man sicher nicht kucken. Ich wollte nur sagen, daß das abtasten mit der Frequenz möglich ist.</p>
<p>evi48</p>
]]></description><link>https://www.c-plusplus.net/forum/post/835464</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/835464</guid><dc:creator><![CDATA[evi48]]></dc:creator><pubDate>Thu, 21 Jul 2005 07:27:39 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Thread on Thu, 21 Jul 2005 07:26:43 GMT]]></title><description><![CDATA[<p>Hallo Tom7,<br />
das sieht für mich so aus als würdest du die While-Schleife mit allem was der PC hergibt durchlaufen.</p>
<pre><code class="language-cpp">void __fastcall ControlProcess::Execute(){ 
  while(bLoop){ 
    Control(); 
    Synchronize(UpdateLabel); 
  } 
}
</code></pre>
<p>Da kann die Anzeige nicht mitkommen und dein Programm läuft nicht. Junix hat mich auch zu diesem Problem in diesem Thread angesprochen. Du mußt die Anzeige von dem Messthread entkoppeln. Soll heissen dein Messthread schreibt die Daten in einen Puffer auf den dein Anzeigethread zugreifen darf (geschützter Bereich), aber mit einer total anderen Frequenz läuft wie dein Messthread.</p>
<p>evi48</p>
]]></description><link>https://www.c-plusplus.net/forum/post/835470</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/835470</guid><dc:creator><![CDATA[evi48]]></dc:creator><pubDate>Thu, 21 Jul 2005 07:26:43 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Thread on Thu, 21 Jul 2005 07:46:56 GMT]]></title><description><![CDATA[<p>evi48 schrieb:</p>
<blockquote>
<p>Hallo Tom7,<br />
das sieht für mich so aus als würdest du die While-Schleife mit allem was der PC hergibt durchlaufen.</p>
<pre><code class="language-cpp">void __fastcall ControlProcess::Execute(){ 
  while(bLoop){ 
    Control(); 
    Synchronize(UpdateLabel); 
  } 
}
</code></pre>
<p>Da kann die Anzeige nicht mitkommen und dein Programm läuft nicht. Junix hat mich auch zu diesem Problem in diesem Thread angesprochen. Du mußt die Anzeige von dem Messthread entkoppeln. Soll heissen dein Messthread schreibt die Daten in einen Puffer auf den dein Anzeigethread zugreifen darf (geschützter Bereich), aber mit einer total anderen Frequenz läuft wie dein Messthread.</p>
<p>evi48</p>
</blockquote>
<p>Ja genau so hab ich's gelöst wenn ich nur mit einem Thread arbeite, und mit allem was der PC hergibt, ganz stimmts nicht, weil er immer wieder warten muss bis die Platine den Wert zurückgegeben hat, dauert mitunter mal 1-2 Sekunden. CPU Auslastung unter 20%. Aber mein eigentliches Problem warum funkt das mit den 2 Thread's nicht ich hab doch die Initialisierung richtig oder?<br />
Im Thread kann ich doch dann ruhig wieder eine While Schleife durchlaufen oder, hängt da der eine den anderen Thread auf?<br />
Könntest mir nicht a bissl auf die Sprünge helfen, mit den Threads hab ich leider noch nicht so viel erfahrung</p>
]]></description><link>https://www.c-plusplus.net/forum/post/835481</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/835481</guid><dc:creator><![CDATA[Tom7]]></dc:creator><pubDate>Thu, 21 Jul 2005 07:46:56 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Thread on Thu, 21 Jul 2005 08:33:04 GMT]]></title><description><![CDATA[<p>evi48 schrieb:</p>
<blockquote>
<p>nein natürlich nicht mit 100Hz anzeigen so schnell kann man sicher nicht kucken. Ich wollte nur sagen, daß das abtasten mit der Frequenz möglich ist.</p>
</blockquote>
<p>Die Abtastfrequenz hängt lediglich von 2 Faktoren ab: Eingangsgeschwindigkeit, sowie Ausgabegeschwindigkeit. Wenn du zwischen Eingabe und Ausgabe nen grossen Puffer klatschst, der schnell ist, erreichst du auch Abtastraten erheblich über 100Hz...</p>
<p>Der Trick dabei ist eigentlich, das dann für die Anzeige einzelne Werte übersprungen werden und z.B. aber für einen Dump in ein File aus dem Datenpuffer ausgelesen wird.</p>
<p>-junix</p>
]]></description><link>https://www.c-plusplus.net/forum/post/835515</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/835515</guid><dc:creator><![CDATA[junix]]></dc:creator><pubDate>Thu, 21 Jul 2005 08:33:04 GMT</pubDate></item></channel></rss>