<?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[AnfängerProbleme mit Threads]]></title><description><![CDATA[<p>Hallo,<br />
mein Programm liest über die serielle schnittstelle aus einem Gerät Messwerte und stellt Sie in einem Dialog grafisch dar.<br />
Die Kommunikation möchte ich nun in einen eigenen Thread packen.</p>
<p>Dazu hab ich nun neue Klasse erstellt, CComThread, abgeleitet von CWinThread und im header folgendes deklariert:</p>
<pre><code class="language-cpp">virtual int Run();
CDisplay* m_dialogvar;
CDisplay* m_pOwner;
void SetOwner(CDisplay* pOwner) {m_pOwner = pOwner;}
</code></pre>
<p>Die Hauptklasse ist wohl der Dialog,in dem Messergebnisse dargestellt werden, CDisplay.</p>
<pre><code class="language-cpp">void CDisplay::DisplayCom()
{
	class CComThread;
	CComThread* m_xDisplayThread;

	m_xDisplayThread = (CComThread*)
	AfxBeginThread(RUNTIME_CLASS(CComThread), NULL, 0, CREATE_SUSPENDED);
	m_xDisplayThread-&gt;SetOwner(this);
	m_xDisplayThread-&gt;ResumeThread();
}
</code></pre>
<p>habe dann mal compiliert und kriege den Error: Verwendung des undefinierten Typs &quot;(void) CDisplay::DisplayCom::ComThread&quot;</p>
<p>Was habe ich denn falsch gemacht??</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/170389/anfängerprobleme-mit-threads</link><generator>RSS for Node</generator><lastBuildDate>Tue, 28 Apr 2026 05:13:53 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/170389.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 15 Jan 2007 11:37:48 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to AnfängerProbleme mit Threads on Mon, 15 Jan 2007 11:37:48 GMT]]></title><description><![CDATA[<p>Hallo,<br />
mein Programm liest über die serielle schnittstelle aus einem Gerät Messwerte und stellt Sie in einem Dialog grafisch dar.<br />
Die Kommunikation möchte ich nun in einen eigenen Thread packen.</p>
<p>Dazu hab ich nun neue Klasse erstellt, CComThread, abgeleitet von CWinThread und im header folgendes deklariert:</p>
<pre><code class="language-cpp">virtual int Run();
CDisplay* m_dialogvar;
CDisplay* m_pOwner;
void SetOwner(CDisplay* pOwner) {m_pOwner = pOwner;}
</code></pre>
<p>Die Hauptklasse ist wohl der Dialog,in dem Messergebnisse dargestellt werden, CDisplay.</p>
<pre><code class="language-cpp">void CDisplay::DisplayCom()
{
	class CComThread;
	CComThread* m_xDisplayThread;

	m_xDisplayThread = (CComThread*)
	AfxBeginThread(RUNTIME_CLASS(CComThread), NULL, 0, CREATE_SUSPENDED);
	m_xDisplayThread-&gt;SetOwner(this);
	m_xDisplayThread-&gt;ResumeThread();
}
</code></pre>
<p>habe dann mal compiliert und kriege den Error: Verwendung des undefinierten Typs &quot;(void) CDisplay::DisplayCom::ComThread&quot;</p>
<p>Was habe ich denn falsch gemacht??</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1210166</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1210166</guid><dc:creator><![CDATA[maRKus23]]></dc:creator><pubDate>Mon, 15 Jan 2007 11:37:48 GMT</pubDate></item><item><title><![CDATA[Reply to AnfängerProbleme mit Threads on Mon, 15 Jan 2007 11:45:37 GMT]]></title><description><![CDATA[<p>Wenn Du es so machen willst musst Du CComThread von CWinThread ableiten, wie es auch in der Beschreibung steht. Zudem musst Du diese Klasse mit DECLARE_DYNCREATE/IMPLEMENT_DYNCREATE versehen!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1210171</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1210171</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Mon, 15 Jan 2007 11:45:37 GMT</pubDate></item><item><title><![CDATA[Reply to AnfängerProbleme mit Threads on Mon, 15 Jan 2007 11:49:02 GMT]]></title><description><![CDATA[<p>Ah, okay versuch das mal, wirst aber sicher bald wieder von mir hören.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1210176</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1210176</guid><dc:creator><![CDATA[maRKus23]]></dc:creator><pubDate>Mon, 15 Jan 2007 11:49:02 GMT</pubDate></item><item><title><![CDATA[Reply to AnfängerProbleme mit Threads on Mon, 15 Jan 2007 11:59:02 GMT]]></title><description><![CDATA[<p>DECLARE_DYNCREATE/IMPLEMENT_DYNCREATE steht in ComThread.cpp und ComThread.h schon drin. Der Fehler ist woanders.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1210186</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1210186</guid><dc:creator><![CDATA[maRKus23]]></dc:creator><pubDate>Mon, 15 Jan 2007 11:59:02 GMT</pubDate></item><item><title><![CDATA[Reply to AnfängerProbleme mit Threads on Mon, 15 Jan 2007 12:35:32 GMT]]></title><description><![CDATA[<p>Kann mir jemand sagen wo der Fehler liegt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1210211</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1210211</guid><dc:creator><![CDATA[maRKus23]]></dc:creator><pubDate>Mon, 15 Jan 2007 12:35:32 GMT</pubDate></item><item><title><![CDATA[Reply to AnfängerProbleme mit Threads on Mon, 15 Jan 2007 13:05:58 GMT]]></title><description><![CDATA[<p>muss ich eigentlich einen arbeitsthread oder einen benutzerthread für diese aufgabe erstellen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1210233</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1210233</guid><dc:creator><![CDATA[maRKus23]]></dc:creator><pubDate>Mon, 15 Jan 2007 13:05:58 GMT</pubDate></item><item><title><![CDATA[Reply to AnfängerProbleme mit Threads on Mon, 15 Jan 2007 13:12:57 GMT]]></title><description><![CDATA[<p>Lass mal das class CComThread; da weg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1210238</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1210238</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Mon, 15 Jan 2007 13:12:57 GMT</pubDate></item><item><title><![CDATA[Reply to AnfängerProbleme mit Threads on Mon, 15 Jan 2007 14:34:18 GMT]]></title><description><![CDATA[<p>Hab das jetzt anders gemacht. Hab da aber auch jede Menge Probleme.</p>
<pre><code class="language-cpp">UINT ThreadFunc( LPVOID pParam )
{	
	Hex2Float hex2float;

	MyCOM.DC_Com_Properties.BaudRate = 1200;
	MyCOM.DC_Com_Properties.ByteSize = 8;
	MyCOM.DC_Com_Properties.Parity = NOPARITY;
	MyCOM.DC_Com_Properties.StopBits =1;
	MyCOM.DC_Com_Properties.fOutxCtsFlow=0;
    MyCOM.DC_Com_Properties.fOutxDsrFlow=0;
}

void CDisplay::DisplayCom()
{	
CWinThread *pThread = AfxBeginThread(ThreadFunc, GetSafeHwnd(),   THREAD_PRIORITY_NORMAL);
}
</code></pre>
<p>MyCOM hab ich in der HeaderDatei von Display deklariert.<br />
Jetzt krieg ich einen LinkerError.<br />
&quot;MyCOM ist bereits in CommPort.obj definiert&quot;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1210275</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1210275</guid><dc:creator><![CDATA[maRKus23]]></dc:creator><pubDate>Mon, 15 Jan 2007 14:34:18 GMT</pubDate></item><item><title><![CDATA[Reply to AnfängerProbleme mit Threads on Mon, 15 Jan 2007 15:04:32 GMT]]></title><description><![CDATA[<p>maRKus23 schrieb:</p>
<blockquote>
<p>MyCOM hab ich in der HeaderDatei von Display deklariert.</p>
</blockquote>
<p>Offenbar hast du es nicht nur deklariert, sondern auch definiert. Und das ist auch das Problem. Man definiert keine Variablen in Headerdateien.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1210305</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1210305</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Mon, 15 Jan 2007 15:04:32 GMT</pubDate></item><item><title><![CDATA[Reply to AnfängerProbleme mit Threads on Tue, 16 Jan 2007 10:28:02 GMT]]></title><description><![CDATA[<p>Das Problem habe ich auch mit anderen Variablen, zb. ComFlag.<br />
In meiner Headerdatei steht dann</p>
<pre><code class="language-cpp">int ComFlag;
</code></pre>
<p>ist das dann eine Deklaration oder eine Definition?<br />
ich war immer der Ansicht das wäre eine Deklaration.<br />
Wie kann ich nun globale Variablen deklarieren und definieren, die sowohl in CDisplay::DisplayCom() und in meiner ThreadFunction UINT ComThreadProc(LPVOID pParam) zum Einsatz kommen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1210609</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1210609</guid><dc:creator><![CDATA[maRKus23]]></dc:creator><pubDate>Tue, 16 Jan 2007 10:28:02 GMT</pubDate></item><item><title><![CDATA[Reply to AnfängerProbleme mit Threads on Tue, 16 Jan 2007 10:40:04 GMT]]></title><description><![CDATA[<p>maRKus23 schrieb:</p>
<blockquote>
<p>In meiner Headerdatei steht dann</p>
<pre><code class="language-cpp">int ComFlag;
</code></pre>
<p>ist das dann eine Deklaration oder eine Definition?</p>
</blockquote>
<p>Das ist eine Definition.</p>
<blockquote>
<p>Wie kann ich nun globale Variablen deklarieren und definieren, die sowohl in CDisplay::DisplayCom() und in meiner ThreadFunction UINT ComThreadProc(LPVOID pParam) zum Einsatz kommen?</p>
</blockquote>
<p>Deklarieren kannst du die Variable mit extern, also</p>
<pre><code class="language-cpp">extern int ComFlag;
</code></pre>
<p>in der Headerdatei.</p>
<p>Dann musst du die Variable noch in <em>einer</em> Quellcodedatei definieren. Dabei kannst du sie dann auch gleich initialisieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1210616</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1210616</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Tue, 16 Jan 2007 10:40:04 GMT</pubDate></item><item><title><![CDATA[Reply to AnfängerProbleme mit Threads on Tue, 16 Jan 2007 11:12:49 GMT]]></title><description><![CDATA[<p>probier ich mal aus, du hörst sicher gleich wieder von mir. ich habe noch jede menge probleme, an denen ich fast verzweifle. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1210638</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1210638</guid><dc:creator><![CDATA[maRKus23]]></dc:creator><pubDate>Tue, 16 Jan 2007 11:12:49 GMT</pubDate></item><item><title><![CDATA[Reply to AnfängerProbleme mit Threads on Tue, 16 Jan 2007 11:35:02 GMT]]></title><description><![CDATA[<p>okay hab das dann soweit erledigt, allerdings kann ich aus dem Thread heraus keine Bytes mehr an mein Gerät senden.</p>
<pre><code class="language-cpp">UINT ComThreadProc(LPVOID pParam)    //Thread funktioniert Kommunikation nicht
{
	 BOOL bCancel = FALSE;
	 BYTE Message5[2] = {0x10, 0x0c};
	 BYTE Response2[200];

          SerialPort MyCOM;     

	while(bCancel == FALSE)
	 {
		MyCOM.WriteNBytes (2, (BYTE*) Message5);
		Sleep(3000);
		MyCOM.ReadNBytes(MyCOM.BytesInQueue(), (BYTE*) Response2);
          }

void CDisplay::DisplayCom()
{		
	Hex2Float hex2float;
	SerialPort MyCOM;

	MyCOM.DC_Com_Properties.BaudRate = 1200;
	MyCOM.DC_Com_Properties.ByteSize = 8;
	MyCOM.DC_Com_Properties.Parity = NOPARITY;
	MyCOM.DC_Com_Properties.StopBits =1;
	MyCOM.DC_Com_Properties.fOutxCtsFlow=0;
    MyCOM.DC_Com_Properties.fOutxDsrFlow=0;

	BYTE Message0[10] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0x81, 0x00,0x00, 0x83};
	BYTE Message1[7] = {0x20, 0x70, 0x00, 0x00, 0x00, 0x00, 0x90};
	BYTE Message2[2] = {0x10, 0x01};
	BYTE Message3[2] = {0x10, 0x02};
	BYTE Message4[7] = {0x20, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x3E};

	BYTE Response[200];

	MyCOM.Open(2);			  // open port  
	MyCOM.ControlDTR(true);   // power on  
	Sleep (1500);

	MyCOM.WriteNBytes (10, (BYTE*) Message0);	//Hart Kommando
    Sleep (1000);
	MyCOM.WriteNBytes (7, (BYTE*) Message1);	//State
    Sleep (500);
	MyCOM.ControlDTR(false);   // power off  
	MyCOM.ControlDTR(true);   // power on  
	Sleep (1500);
	MyCOM.WriteNBytes (2, (BYTE*) Message2);	//upper value
	Sleep (1000);
	MyCOM.WriteNBytes (2, (BYTE*) Message3);	//lower value
	Sleep (1000);
	MyCOM.WriteNBytes (7, (BYTE*) Message4);	//current 4mA
	Sleep (2000);

MyCOM.ReadNBytes(MyCOM.BytesInQueue(), Response);
</code></pre>
<p>Was habe ich denn im Thread falsch gemacht das die Kommunikation nicht mehr geht?</p>
<p>in der headerdatei habe ich folgendes</p>
<pre><code class="language-cpp">extern SerialPort MyCOM;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1210655</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1210655</guid><dc:creator><![CDATA[maRKus23]]></dc:creator><pubDate>Tue, 16 Jan 2007 11:35:02 GMT</pubDate></item><item><title><![CDATA[Reply to AnfängerProbleme mit Threads on Tue, 16 Jan 2007 12:14:32 GMT]]></title><description><![CDATA[<p>Okay die Kommunikation funktioniert jetzt.<br />
Jetzt muss ich nur noch den Wert in meinem Dialog ausgeben.</p>
<pre><code class="language-cpp">void SetPVTemperature(float fTemperaturePV)
{
	char buffer[20];
	CString szTemperature = &quot;&quot;;
	float fPercentMeasuring = 0;

	CString szPercentMeasuring;
	CStatic m_Static_fPrimaryValue;

	_gcvt(fTemperaturePV, 5, buffer);
	 szTemperature= buffer;
	 szTemperature.Replace('.',',');
	 m_Static_fPrimaryValue.SetWindowText(szTemperature);
}

UINT ComThreadProc(LPVOID pParam)
{
hex2float.Hex[0] = Response2[j+2];			
hex2float.Hex[1] = Response2[j+3];
hex2float.Hex[2] = Response2[j+4];
hex2float.Hex[3] = Response2[j+5];
fTemperaturePV = hex2float.fValue;
SetPVTemperature(fTemperaturePV);
}
</code></pre>
<p>so wollte ich SetPVTemperature() aufrufen und die Variable fTemperaturePV übergeben und anschließend im Dialog darstellen.<br />
Nach m_Static_fPrimaryValue.SetWindowText(szTemperature); bricht er aber das Programm ab.</p>
<p>der stackpointer(?) steht dann in dbgrpt.c im Code</p>
<pre><code class="language-cpp">_CRTIMP void _cdecl_CrtDbgBreak(void)
{
   DebugBreak;
}
</code></pre>
<p>Ich versteh dieses Code Segment nicht.<br />
Wer kann mir weiterhelfen?</p>
<p>[/cpp]</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1210699</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1210699</guid><dc:creator><![CDATA[maRKus23]]></dc:creator><pubDate>Tue, 16 Jan 2007 12:14:32 GMT</pubDate></item><item><title><![CDATA[Reply to AnfängerProbleme mit Threads on Tue, 16 Jan 2007 13:31:41 GMT]]></title><description><![CDATA[<p>Also mein Dialog ist nnicht richtig initialisiert zu dem Zeitpunkt wenn ich SetWindowText ausführe.<br />
Wie muss ich den Dialog richtig initialisieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1210761</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1210761</guid><dc:creator><![CDATA[maRKus23]]></dc:creator><pubDate>Tue, 16 Jan 2007 13:31:41 GMT</pubDate></item><item><title><![CDATA[Reply to AnfängerProbleme mit Threads on Tue, 16 Jan 2007 14:56:12 GMT]]></title><description><![CDATA[<p>Hilfe, bitte postet mir mal ein Beispiel wie man zwischen dem Hauptthread und dem Arbeitsthread kommunizieren kann.<br />
Möchte doch nur eine Funktion aus dem Hauptthread aufrufen und ihr eine Variable übergeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1210826</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1210826</guid><dc:creator><![CDATA[maRKus23]]></dc:creator><pubDate>Tue, 16 Jan 2007 14:56:12 GMT</pubDate></item></channel></rss>