<?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[Membervariablen in WorkerThread übernehmen?]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe eine kleine Frage: Ist es möglich Member-Variablen, wie z.B. eine Variable, die aus einem Eingabefeld eingelesen worden ist, in einen WorkerThread zu übergeben? Ich möchte keinen UI-Thread machen, da ich keine Ausgaben innerhalb dieses Threads machen möchte. Ich möchte nur die Member-Variablen aus Eingabefeldern in dem WorkerThread benutzen. Das unelegante Erzeugen einer globalen Variablen, die den Inhalt der Member-Variablen enthält, möchte ich vermeiden.</p>
<p>Kann man also Member-Variablen in WorkerThreads übergeben? Und wie? Wäre nett, wenn mir jemand ein Beispiel posten könnte. Es sollen so um die zehn Member-Variablen im WorkerThread benutzt werden.<br />
Danke.</p>
<p>Eine Rückgabe der Member-Variablen, geändert im WorkerThread, in andere MFC-Funktionen ist vermutlich nicht möglich, oder (ausser global)? Aber ist auch nicht so unbedingt notwendig.</p>
<p>Grüße<br />
JohnTK</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/80526/membervariablen-in-workerthread-übernehmen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 17 Apr 2026 16:43:56 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/80526.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 22 Jul 2004 07:31:14 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Membervariablen in WorkerThread übernehmen? on Thu, 22 Jul 2004 07:31:14 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe eine kleine Frage: Ist es möglich Member-Variablen, wie z.B. eine Variable, die aus einem Eingabefeld eingelesen worden ist, in einen WorkerThread zu übergeben? Ich möchte keinen UI-Thread machen, da ich keine Ausgaben innerhalb dieses Threads machen möchte. Ich möchte nur die Member-Variablen aus Eingabefeldern in dem WorkerThread benutzen. Das unelegante Erzeugen einer globalen Variablen, die den Inhalt der Member-Variablen enthält, möchte ich vermeiden.</p>
<p>Kann man also Member-Variablen in WorkerThreads übergeben? Und wie? Wäre nett, wenn mir jemand ein Beispiel posten könnte. Es sollen so um die zehn Member-Variablen im WorkerThread benutzt werden.<br />
Danke.</p>
<p>Eine Rückgabe der Member-Variablen, geändert im WorkerThread, in andere MFC-Funktionen ist vermutlich nicht möglich, oder (ausser global)? Aber ist auch nicht so unbedingt notwendig.</p>
<p>Grüße<br />
JohnTK</p>
]]></description><link>https://www.c-plusplus.net/forum/post/565631</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/565631</guid><dc:creator><![CDATA[JohnTK]]></dc:creator><pubDate>Thu, 22 Jul 2004 07:31:14 GMT</pubDate></item><item><title><![CDATA[Reply to Membervariablen in WorkerThread übernehmen? on Thu, 22 Jul 2004 08:00:53 GMT]]></title><description><![CDATA[<p>Du must nur den this pointer deiner Klasse an den Thread übergeben. Über denn kommst du dann an die member variablen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/565652</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/565652</guid><dc:creator><![CDATA[CMatt]]></dc:creator><pubDate>Thu, 22 Jul 2004 08:00:53 GMT</pubDate></item><item><title><![CDATA[Reply to Membervariablen in WorkerThread übernehmen? on Fri, 23 Jul 2004 09:54:30 GMT]]></title><description><![CDATA[<p>Ja aber das geht ja auch nur, wenn man den Thread nicht global deklariert hat, sondern als statische Member-Funktion. Und dann muss man noch den this -Zeiger nachfolgend in der statischen Funktion in einen Zeiger auf die Dialogklasse umwandeln. Das geht.<br />
Gibt es aber nun noch ne Möglichkeit, den Thread ausserhalb der Funktion zu beenden? TerminateThread benötigt einen Handle auf den Thread. Hab ich aber nicht. Mein Thread läuft dummerweise in einer Schleife, aus die er nicht herauskommt und sich somit nicht selbst beendet, wenn ich das wünsche.<br />
Die Schleife sieht so aus:</p>
<pre><code class="language-cpp">void Thread2()
{
    while (StopButton == FALSE)//solange StopButton zum Beenden des Thread nicht gedrückt
    {
        if (WaitForSingleObject(n_hNewDataEvent,INFINITE)==WAIT_OBJECT_0)//warte bis Event ausgelöst, Event:Erstellen einer Liste
        {
            while (m_iItemCount&gt;0)//solange noch was in der Liste
            {
                send_data_to_LPT_Port();
                InterlockedDecrement(m_iItemCount);//dekrementiere Zähler
            }
        }
    }
}
</code></pre>
<p>Wie kann ich die Schleife abbrechen, wenn der StopButton gedrückt wird? Wo ist der Denkfehler? Und kann ich die Schleife auch von aussen abbrechen?</p>
<p>Danke für Anregungen und Tipps.</p>
<p>JohnTK</p>
]]></description><link>https://www.c-plusplus.net/forum/post/566708</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/566708</guid><dc:creator><![CDATA[JohnTK]]></dc:creator><pubDate>Fri, 23 Jul 2004 09:54:30 GMT</pubDate></item><item><title><![CDATA[Reply to Membervariablen in WorkerThread übernehmen? on Fri, 23 Jul 2004 10:54:16 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">class MyClass
{
HANDLE m_hStopEvent;
HANDLE m_hNewDataEvent;
HANDLE m_hThread;

MyClass()
{
  hStopEvent = CreateEvent(NULL,FALSE,FALSE,NULL);
  hNewDataEvent = CreateEvent(NULL,FALSE,FALSE,NULL);
}
~MyClass()
{
  CloseHandle(hStopEvent);
  CloseHandle(hNewDataEvent);
}

void OnStartThread()
{
   hThread = _beginthreadex(NULL,0,MyThread,this,0,0); // starte the thread
}
void OnStopThread()
{
  SetEvent(m_hStopEvent);  // setzte das stop event
  SetEvent(hNewDataEvent); // setzt das new-dara event

  while(WaitForSingleObject(hThread,5000)==WAIT_TIMEOUT) // warte
  {
     // frage
     if(MessageBox(&quot;Thread konnte nicht beendet werden!!! (ahhhhhhhh)\r\n&quot;
                &quot;Wollen sie ihn gewaltsahm über den Jordan schicken? :/&quot;,
                &quot;ERROR&quot;,MB_YESNO) == IDYES)
     {
        TerminateThread(hThread,0); // messer durch die rippen
        return;
     }
  }
}

unsigned long MyThread(void *p)
{
   MyClass *_this = (MyClass*)p;
   while(WaitForSingleObject(_this-&gt;m_hNewDataEvent,INFINITE)==WAIT_OBJECT_0)
   { 
      if(WaitForSingleObject(_this-&gt;m_hStopEvent,0)==WAIT_OBJECT_0)
         return 0;
      // blabla
   }
}
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/566746</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/566746</guid><dc:creator><![CDATA[CMatt]]></dc:creator><pubDate>Fri, 23 Jul 2004 10:54:16 GMT</pubDate></item><item><title><![CDATA[Reply to Membervariablen in WorkerThread übernehmen? on Mon, 26 Jul 2004 15:02:34 GMT]]></title><description><![CDATA[<p>Danke für den Tipp. Hat mir geholfen.<br />
Allerdings benutze ich weiterhin zum Erzeugen der Threads die Funktion AfxBeginThread. Dachte erst ich bekäme dabei keinen Handle zurück, den ich ja zum externen Terminieren von Prozessen benötige. Aber geht doch! Die Klasse CWinThread besitzt das public-Attribut m_hThread, ein Threadhandle!<br />
Ich hab das dann so gelöst:</p>
<pre><code class="language-cpp">void OnStartThread()
{
    pThread = AfxBeginThread(thrFunction,this);
}
UINT thrFunction(LPVOID pParam)
{
    // do something
}
void OnStopThread()
{
    // wenn Thread noch nicht terminiert ist, dann terminiere wie Axt im Walde
    TerminateThread(pThread-&gt;m_hThread,0);
}
</code></pre>
<p>Natürlich habe ich es ein wenig anders gehandhabt, habe nicht gleich den Thread terminiert, sondern erst Event gesetzt, dass in thrFunction abgehört wird. Und dann wird aus dem Thread ausgestiegen. Das Terminieren des Threads von aussen ist die letzte Möglichkeit den Thread zu beenden, und auch die härteste.<br />
Okay, danke nochmals<br />
Grüße<br />
JohnTK</p>
]]></description><link>https://www.c-plusplus.net/forum/post/568661</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/568661</guid><dc:creator><![CDATA[JohnTK]]></dc:creator><pubDate>Mon, 26 Jul 2004 15:02:34 GMT</pubDate></item></channel></rss>