<?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[Multithreading]]></title><description><![CDATA[<p>hi, ich hab ein kleines Programm geschrieben. es startet einen 2. Thread (worker-thread) indem was getan wird. da wird auch ne zahl hochgezählt. diese zahl benötige ich im haupt-thread zum anzeigen eines statusbalken. wie bewerkstellige ich das?</p>
<p>hier mein code:</p>
<p>aufruf in der start-funktion:<br />
CWinThread* pThread = AfxBeginThread (thrFunction, &amp;m_Flag);</p>
<p>in der thr-funktion:<br />
UINT thrFunction(LPVOID pParam)<br />
{<br />
int* pFlag = (int*) pParam;<br />
...<br />
}</p>
<p>wer kann mir helfen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/164500/multithreading</link><generator>RSS for Node</generator><lastBuildDate>Fri, 31 Jul 2026 05:22:42 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/164500.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 08 Nov 2006 21:29:39 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Multithreading on Wed, 08 Nov 2006 21:29:39 GMT]]></title><description><![CDATA[<p>hi, ich hab ein kleines Programm geschrieben. es startet einen 2. Thread (worker-thread) indem was getan wird. da wird auch ne zahl hochgezählt. diese zahl benötige ich im haupt-thread zum anzeigen eines statusbalken. wie bewerkstellige ich das?</p>
<p>hier mein code:</p>
<p>aufruf in der start-funktion:<br />
CWinThread* pThread = AfxBeginThread (thrFunction, &amp;m_Flag);</p>
<p>in der thr-funktion:<br />
UINT thrFunction(LPVOID pParam)<br />
{<br />
int* pFlag = (int*) pParam;<br />
...<br />
}</p>
<p>wer kann mir helfen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1171474</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1171474</guid><dc:creator><![CDATA[Majestix]]></dc:creator><pubDate>Wed, 08 Nov 2006 21:29:39 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading on Wed, 08 Nov 2006 21:53:40 GMT]]></title><description><![CDATA[<p>du könntest dem Thread beim Aufruf einfach einen Pointer auf eine Variable im Hauptprogramm übergeben...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1171490</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1171490</guid><dc:creator><![CDATA[flenders]]></dc:creator><pubDate>Wed, 08 Nov 2006 21:53:40 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading on Wed, 08 Nov 2006 22:06:01 GMT]]></title><description><![CDATA[<p>meinst du so:</p>
<p>int variable=0;<br />
CWinThread* pThread = AfxBeginThread (thrFunction, &amp;m_Flag, &amp;variable);</p>
<p>in der thr-funktion:<br />
UINT thrFunction(LPVOID pParam, int variable)<br />
{<br />
int* pFlag = (int*) pParam;<br />
variable++; //erhöhe<br />
...<br />
}</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1171498</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1171498</guid><dc:creator><![CDATA[Majestix]]></dc:creator><pubDate>Wed, 08 Nov 2006 22:06:01 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading on Wed, 08 Nov 2006 23:11:44 GMT]]></title><description><![CDATA[<p>Du solltest die Interlocked Funktionen verwenden um auf die Variable zuzugreifen, oder aber eine Mutex/CriticalSection um den Zugriff zu synchronisieren.</p>
<pre><code class="language-cpp">LONG volatile variable=0; 
CWinThread* pThread = AfxBeginThread (thrFunction, &amp;m_Flag, (void*)&amp;variable); 

//in der thr-funktion: 
UINT thrFunction(LPVOID pParam) 
{ 
LONG volatile* pFlag = (LONG volatile*) pParam; 
::InterlockedIncrement(pFlag); //erhöhe 
//... 
}

//auslesen:
void Foo()
{
    LONG v = *variable;
    // oder
    LONG v2 = ::InterlockedCompareExchange(variable, 0, 0);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1171512</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1171512</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 08 Nov 2006 23:11:44 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading on Thu, 09 Nov 2006 11:55:44 GMT]]></title><description><![CDATA[<p>irgendwas stimmt nicht. bekomme diese fehlermedung:</p>
<p>'AfxBeginThread' : Durch keine der 2 Ueberladungen kann Parameter 3 vom Typ 'void *' konvertiert werden</p>
<p>kann (void*)&amp;variable nicht übergeben<br />
was ist das für ein fehler und wie kann man es sonst lösen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1171656</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1171656</guid><dc:creator><![CDATA[Majestix]]></dc:creator><pubDate>Thu, 09 Nov 2006 11:55:44 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading on Thu, 09 Nov 2006 12:24:57 GMT]]></title><description><![CDATA[<p>Ok, hab nicht genau geguckt. Der Aufruf &quot;AfxBeginThread (thrFunction, &amp;m_Flag, &amp;variable); &quot; wie du ihn gepostet hast ist ja schon komplett falsch.</p>
<pre><code class="language-cpp">CWinThread* pThread = AfxBeginThread (thrFunction, (void*)&amp;variable);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1171681</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1171681</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 09 Nov 2006 12:24:57 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading on Thu, 09 Nov 2006 12:27:51 GMT]]></title><description><![CDATA[<p>Dieser Thread wurde von Moderator/in <a href="http://www.c-plusplus.net/forum/profile.php?mode=viewprofile&amp;u=18363" rel="nofollow">Jochen Kalmbach</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/viewforum.php?f=4" rel="nofollow">WinAPI</a> in das Forum <a href="http://www.c-plusplus.net/forum/viewforum.php?f=1" rel="nofollow">MFC (Visual C++)</a> verschoben.</p>
<p>Im Zweifelsfall bitte auch folgende Hinweise beachten:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic.php?t=39405" rel="nofollow">C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?</a></p>
<p><em>Dieses Posting wurde automatisch erzeugt.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1171684</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1171684</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Thu, 09 Nov 2006 12:27:51 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading on Thu, 09 Nov 2006 12:32:26 GMT]]></title><description><![CDATA[<p>aha. wie bekomme ich das jetzt hin?</p>
<p>am liebsten wär mir wenn eine variable aus meinem haupt-thread im erzeugten worker-thread hochgezählt wird. das ist alles was ich möchte.<br />
gibts da ne elegante / leichte methode dies zu bewerkstelligen?</p>
<p>wie ich ja bereits versucht zu erklären habe: ich hab meinen hauptthread. da klickt der user auf einen button. in dessen funktion wird der thread gestartet. in ihm soll etwas getan werden. damit der user auf dem laufenden bleibt will ichs ihm anhand einer progressbar anzeigen, wie weit der prozess schon fertig ist. und jetzt suche ich eine möglichkeit wie ich den statuswert (gespeichert in ner variablen) aus dem work-thread in den haupt-thread bekomme. dabei will ich auf schleifen im haupt-thread verzichten, damit der GUI nicht hängt und man auf abbrechen klicken kann</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1171687</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1171687</guid><dc:creator><![CDATA[Majestix]]></dc:creator><pubDate>Thu, 09 Nov 2006 12:32:26 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading on Fri, 10 Nov 2006 02:33:26 GMT]]></title><description><![CDATA[<p>PostMessage + WM_USER.<br />
Ist Plattformabhängig, aber wenn du schon MFC hast ist das auch schon egal.<br />
Dafür sparst du dir die Synchronisation, weil Windows das dann übernimmt, und du brauchst keinen Timer, weil der Dialog ja ne Message bekommt (die dann natürlich der Thread abarbeitet welcher den Dialog erstellt hat, also normalerweise der Main-Thread).</p>
<p>Die Variante ist auch ziemlich &quot;Deppensicher&quot;, zumindest solange du nicht 1 Mio. Messages pro Sekunde postest. Das lässt sich aber leicht vermeiden, indem du z.B. den Progress in Prozent (integer) angibst, und nur ne Message postest wenn sich der Progress um min. 1% geändert hat.</p>
<p>Ahja, dazu definierst du dir einfach ne eigene Message ala...</p>
<pre><code>#define WM_MYPROJECTNAME_UPDATE_PROGRESS (WM_USER+123)
</code></pre>
<p>...und schickst den Progress dann einfach als wParam oder lParam mit. Handler mit...</p>
<pre><code>ON_MESSAGE(WM_MYPROJECTNAME_UPDATE_PROGRESS, MemberFunctionName)
</code></pre>
<p>...eintragen. Fertig.<br />
Worauf du aber SEHR acht geben solltest: der Worker-Thread wird wohl Daten brauchen. Wenn diese Daten mit dem Main-Thread &quot;geshared&quot; sind, dann musst (!) du den Zugriff irgendwie Synchronisieren. Wenn beide Threads die gesharten Daten nur (!) lesen ist es nicht notwendig, sonst auf jeden Fall. Ich schreibe das weil du den Eindruck machst nicht viel von Multithreading zu verstehen. Wenn das der Fall ist, dann bitte mach dich zu dem Thema schlau, und mehr als nur 1-2 Stunden Tutorials lesen - das Thema ist SEHR schwierig und komplex. Wenn nicht dann entschuldige bitte den &quot;blöden Hinweis&quot;, kann ja nicht wissen was du kannst und was nicht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1171907</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1171907</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 10 Nov 2006 02:33:26 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading on Fri, 10 Nov 2006 13:55:30 GMT]]></title><description><![CDATA[<p>wow, erstmal vielen vielen dank für deine erklärung. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /><br />
dein vorschlag der datenübertragung ist PERFEKT<br />
hat sicher arbeit gemacht...</p>
<p>deswegen fällts mir umso schwerer dich um nochwas zu bitten:<br />
ich verstehe nicht so ganz wie ich das codetechnisch verwirklichen soll. ich bin blutiger anfänger in threads. kannst du mir ein kleines beispiel geben wie das funktioniert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1172230</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1172230</guid><dc:creator><![CDATA[Majestix]]></dc:creator><pubDate>Fri, 10 Nov 2006 13:55:30 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading on Sat, 11 Nov 2006 14:56:21 GMT]]></title><description><![CDATA[<p>Versuch das mal zu erklären:</p>
<p>in der StdAfx.h (benutz ich immer, da die überall bekannt ist) definierst Du:</p>
<pre><code class="language-cpp">#define WM_MYPROJECTNAME_UPDATE_PROGRESS (WM_USER+123)
</code></pre>
<p>in deiner Dialog-Klasse wo der Statusbalken angezeigt wird:</p>
<pre><code class="language-cpp">BEGIN_MESSAGE_MAP(CXXXDlg, CDialog)
	//{{AFX_MSG_MAP(CXXXDlg)
        ...
	//}}AFX_MSG_MAP
        ON_MESSAGE(WM_MYPROJECTNAME_UPDATE_PROGRESS, MemberFunctionName)
END_MESSAGE_MAP()
LRESULT MemberFunctionName(WPARAM wParam, LPARAM lParam)
{
    Dein_Prograss_Menber.SetPos(wParam);
}
</code></pre>
<p>in der *.h Datei deines Dialoges:</p>
<pre><code class="language-cpp">afx_msg LRESULT MemberFunctionName(WPARAM wParam, LPARAM lParam);
</code></pre>
<p>start deines Threads:</p>
<pre><code class="language-cpp">CWinThread* pThread = AfxBeginThread (thrFunction, (void*)this-&gt;m_hWnd); ( this ist der Zeiger auf deine Dialogklasse in den der Balken beinhaltet ist)
</code></pre>
<p>und die Thread-Funktion:</p>
<pre><code class="language-cpp">UINT thrFunction(LPVOID pParam) 
{ 
//... 
::PostMessage((HWND)pParam,WM_MYPROJECTNAME_UPDATE_PROGRESS,der_Wert,0);
//...
}
</code></pre>
<p>So benutze ich das immer und lauft perfekt (ne um genau zu sein benutze ich oft send Message da wird auf die ausfürung gewartet und erst dann läuft dein Thread weiter. Aber kommt auf den einsatzfall darauf an.</p>
<p>Gruß Matthias</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1172528</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1172528</guid><dc:creator><![CDATA[CTecS]]></dc:creator><pubDate>Sat, 11 Nov 2006 14:56:21 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading on Sat, 11 Nov 2006 16:19:04 GMT]]></title><description><![CDATA[<p>WOW, matthias <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /><br />
danke für die tolle erklärung <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>noch eine frage hab ich: welche funktion meinst du mit MemberFunctionName?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1172569</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1172569</guid><dc:creator><![CDATA[Majestix]]></dc:creator><pubDate>Sat, 11 Nov 2006 16:19:04 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading on Sat, 11 Nov 2006 19:18:11 GMT]]></title><description><![CDATA[<p>Oh Sorry mein Fehler (CopyandPaste) thrFunction sollte eigentlich MemberFunctionName heisen.</p>
<pre><code class="language-cpp">UINT MemberFunctionName (LPVOID pParam) 
{ 
//... 
::PostMessage((HWND)pParam,WM_MYPROJECTNAME_UPDATE_PROGRESS,der_Wert,0);
//...
}
</code></pre>
<p>so jetzt ist es richtig <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>gruß Matthias</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1172708</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1172708</guid><dc:creator><![CDATA[CTecS]]></dc:creator><pubDate>Sat, 11 Nov 2006 19:18:11 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading on Sun, 12 Nov 2006 13:18:41 GMT]]></title><description><![CDATA[<p>ok, ich habs jetzt so (bitte nochmal kontrollieren):</p>
<pre><code class="language-cpp">//definiert in der StdAfx.h
#define WM_MYPROJECTNAME_UPDATE_PROGRESS (WM_USER+123)

//definiert in der CTestDlg.h
UINT thrFunction(LPVOID pParam);

/////////////////////////////////////////////////////////////////////////////
// CAboutDlg-Dialogfeld für Anwendungsbefehl &quot;Info&quot;

class CAboutDlg : public CDialog
{

...

BEGIN_MESSAGE_MAP(CTestDlg, CDialog)
	//{{AFX_MSG_MAP(CTestDlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
	ON_BN_CLICKED(IDC_BUTTON2, OnStart)
	ON_NOTIFY(NM_OUTOFMEMORY, IDC_PROGRESS2, OnOutofmemoryProgress2)
	ON_MESSAGE(WM_MYPROJECTNAME_UPDATE_PROGRESS, thrFunction)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()
LRESULT MemberFunctionName(WPARAM wParam, LPARAM lParam)
{
    m_gesamt.SetPos(wParam); //m_gesamt is die membervariable im haupt-thread
}

... //etwas weiter unten

UINT thrFunction(LPVOID pParam)
 {
 //tu was im thread
 ::PostMessage((HWND)pParam,WM_MYPROJECTNAME_UPDATE_PROGRESS,der_wert,0);
 }

... //weiter unten

void CTestDlg::OnStart() 
{
 CWinThread* pThread = AfxBeginThread (thrFunction, (void*)this-&gt;m_hWnd);
}
</code></pre>
<p>weil das geht nicht, er zeigt einen error an (error C2440: 'type cast' : 'unsigned int (__cdecl *)(void <em>)' kann nicht in 'long (__thiscall CWnd::</em>)(unsigned int,long)' konvertiert werden)</p>
<p>danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1172989</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1172989</guid><dc:creator><![CDATA[Majestix]]></dc:creator><pubDate>Sun, 12 Nov 2006 13:18:41 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading on Sun, 12 Nov 2006 14:12:17 GMT]]></title><description><![CDATA[<p>so noch mal zum abgucken: <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<pre><code class="language-cpp">//definiert in der StdAfx.h
#define WM_MYPROJECTNAME_UPDATE_PROGRESS (WM_USER+123)

//definiert in der CTestDlg.h
UINT thrFunction(LPVOID pParam); //aber außerhalb deiner CTestDlg-Klasse

class CTestDlg: public CDialog
{
// Konstruktion
public:
	CTestDlg(CWnd* pParent = NULL);	// Standard-Konstruktor

....

	// Generierte Message-Map-Funktionen
	//{{AFX_MSG(CHilfetestDlg)
	virtual BOOL OnInitDialog();
	afx_msg void OnPaint();
...
	afx_msg LRESULT MemberFunctionName(WPARAM wParam, LPARAM lParam); //hier die Message Funktion deklarieren
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

/////////////////////////////////////////////////////////////////////////////
// CAboutDlg-Dialogfeld für Anwendungsbefehl &quot;Info&quot;

class CAboutDlg : public CDialog
{

...

BEGIN_MESSAGE_MAP(CTestDlg, CDialog)
	//{{AFX_MSG_MAP(CTestDlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
	ON_BN_CLICKED(IDC_BUTTON2, OnStart)
	ON_NOTIFY(NM_OUTOFMEMORY, IDC_PROGRESS2, OnOutofmemoryProgress2)
	ON_MESSAGE(WM_MYPROJECTNAME_UPDATE_PROGRESS, MemberFunctionName) //hier die Funktion die bei der Message ausgeführt werden soll
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()
LRESULT CTestDlg::MemberFunctionName(WPARAM wParam, LPARAM lParam)// die Message Funktion
{
    m_gesamt.SetPos(wParam); //m_gesamt is die membervariable im haupt-thread

return 0; // hier kannst du deinem Thread etwas zurücksignalisieren oder auch nicht
}

... //etwas weiter unten

UINT thrFunction(LPVOID pParam) // das ist der Thread
 {
 //tu was im thread
 ::PostMessage((HWND)pParam,WM_MYPROJECTNAME_UPDATE_PROGRESS,der_wert,0);

return 0; //normales beenden des Threads
 }

... //weiter unten

void CTestDlg::OnStart() 
{
 CWinThread* pThread = AfxBeginThread (thrFunction, (void*)this-&gt;m_hWnd);
}
</code></pre>
<p>so hab ich das jetzt bei mir laufen und es funzt, aber eben nur ein durchlauf, den Thread solltest du entsprechen ausbauen, eventuell auch mit ner Variable oder so zu frühzeitigen beenden. Falls der Beendet werden soll bevor er runtergelaufen ist. Aber das nur so nebenbei. Viel Spass.</p>
<p>Gruß Matthias</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1173015</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1173015</guid><dc:creator><![CDATA[CTecS]]></dc:creator><pubDate>Sun, 12 Nov 2006 14:12:17 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading on Sun, 12 Nov 2006 17:37:44 GMT]]></title><description><![CDATA[<p>HAMMER<br />
vielen dank <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>funktioniert super</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1173156</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1173156</guid><dc:creator><![CDATA[Majestix]]></dc:creator><pubDate>Sun, 12 Nov 2006 17:37:44 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading on Tue, 14 Nov 2006 13:36:06 GMT]]></title><description><![CDATA[<p>Nachdem ich den Thread jetzt ein wenig verfolgt habe und auch ein ähnliches Problem habe muss ich mich hier mal einklinken. Hoffe Majestix stört es nicht recht, aber nachdem seine Probleme ja anscheinend gelöst sind hoffe ich mal, dass ich den Thread nicht zu unübersichtlich mache!</p>
<p>Mein Problem:</p>
<p>Ich möchte aus meiner von CSCrollView abgeleiteten Klasse einen Thread aufrufen, welcher einige Rechenoperationen auf ein paar in CDocument gespeicherten Daten ausführt, die ein wenig länger dauern.</p>
<p>Nun möchte ich während der Abarbeitung dieser Aufgaben einen Dialog mit einem Fortschrittsbalken anzeigen, was ja eigentlich kein großes Problem sein sollte.</p>
<p>Mein Problem ist, dass ich in der Thread-Funktion auf einige Member der CScrollView-Klasse zugreifen müsste (wie zB. GetDocument()), dies allerdings nicht kann, da die Thread-Funktion ja ausserhalb der Klasse definiert ist (bzw. statisch sein muss, wenn sie innerhalb der Klasse steckt).</p>
<p><strong>Wie kann man sowas nun realisieren?</strong></p>
<p>Mit der Dialog-Sache bin ich mir noch nicht so ganz sicher, also schreibe ich hier mal, wie ich mir das vorstelle und hoffe, dass mir jemand sagt, ob ich mit meinem Vermutungen richtig liege oder wie es richtig wäre:</p>
<p>Ich habe zB. die Funktion CallThread, in der ich mit AfxBeginThread die Thread-Funktion starte. Nach start der Thread-Funktion lasse ich von der CallThread-Funktion aus den Modalen Dialog anzeigen (dh. hier steht die Anwendung mal solange der Dialog sichtbar ist).</p>
<p>Aus der Thread-Funktion aktualisiere ich die ProgressBar des Dialogs mittels PostMessage (wie hier bereits ausführlich diskutiert) und schließe ihn, wenn die Abarbeitung fertig ist -&gt; die Funktion CallThread läuft auch wieder weiter, da der Modale Dialog ja geschlossen wurde.</p>
<p>Hoffe, dass mir jemand helfen kann (speziell die dick geschriebene Frage bereitet mir großes Kopfzerbrechen)!</p>
<p>danke, mfg</p>
<p>mike</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1174504</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1174504</guid><dc:creator><![CDATA[suamikim]]></dc:creator><pubDate>Tue, 14 Nov 2006 13:36:06 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading on Tue, 14 Nov 2006 22:24:43 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">class Foo
{
public:
    // ...
private:
    static UINT ThreadFunctionStatic(LPVOID param)
    {
        Foo* that = static_cast&lt;Foo*&gt;(param);
        return that-&gt;ThreadFunction();
    }

    UINT ThreadFunction()
    {
        // ...
        return 123;
    }
};
</code></pre>
<p>ThreadFunctionStatic kannst du dann als Thread starten, als &quot;void* param&quot; gibste dem Thread dann einfach &quot;this&quot; mit. Fertig. Aber. Du musst verdammt aufpassen dass du nicht ein einem Thread Daten änderst während der andere die liest, oder, noch schlimmer, auch ändert. Lass das mit den Threads mal lieber <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1174794</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1174794</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 14 Nov 2006 22:24:43 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading on Wed, 15 Nov 2006 07:43:54 GMT]]></title><description><![CDATA[<p>Schon klar, dass man da auf die Synchronisation ein wenig aufpassen muss. Nachdem der Benutzer während der Berechnungen sowieso nichts am Programm machen kann/darf hab ich das mit den Threads mal weggelassen und zeige einfach den Fortschritts-Dialog an, welcher halt laufend aktualisiert wird <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Trotzdem gut zu wissen, wie sowas funktioniert!</p>
<p>danke, mfg</p>
<p>ps.:</p>
<blockquote>
<p>Lass das mit den Threads mal lieber <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
</blockquote>
<p>Nana, man ist ja hier um was zu lernen und nicht um gesagt zu bekommen, dass es doch ein wenig zu schwer für einen ist und man lieber die Finger davon lassen sollte <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1174899</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1174899</guid><dc:creator><![CDATA[suamikim]]></dc:creator><pubDate>Wed, 15 Nov 2006 07:43:54 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading on Wed, 15 Nov 2006 23:57:27 GMT]]></title><description><![CDATA[<p>suamikim schrieb:</p>
<blockquote>
<p>Nana, man ist ja hier um was zu lernen und nicht um gesagt zu bekommen, dass es doch ein wenig zu schwer für einen ist und man lieber die Finger davon lassen sollte</p>
</blockquote>
<p>Du hast natürlich recht. Ich hätte besser sagen sollen: beschränke den Einsatz von Threads erstmal auf Projekte die nicht sehr kritisch sind, also wos nicht schlimm ist wenn die hin und wieder mal falsche Daten produzieren oder abschmieren. Lernen musst du ja irgendwie, und das tut man natürlich ab einem gewissen Punkt immer noch am besten in der Praxis.</p>
<p>Und auch wenn jmd. sich schon wirklich gut mit Multithreading auskennt würde ich empfehlen den Einsatz mehrerer Threads in &quot;kritischen&quot; Projekten 3x zu überdenken. Threads sind böse, und wenn du 1x nicht hinguckst packen sie dich von hinten, und verprügeln dich mit einem tiefgefrohrenen Murphy <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1175598</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1175598</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 15 Nov 2006 23:57:27 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading on Thu, 16 Nov 2006 07:47:41 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Du hast natürlich recht. Ich hätte besser sagen sollen: beschränke den Einsatz von Threads erstmal auf Projekte die nicht sehr kritisch sind, also wos nicht schlimm ist wenn die hin und wieder mal falsche Daten produzieren oder abschmieren. Lernen musst du ja irgendwie, und das tut man natürlich ab einem gewissen Punkt immer noch am besten in der Praxis.</p>
</blockquote>
<p>Wäre natürlich passender gewesen. Aber keine Angst, ich hab das schon nicht in den falschen Hals bekommen und es so verstanden, wie ich es verstehen wollte <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>hustbaer schrieb:</p>
<blockquote>
<p>Und auch wenn jmd. sich schon wirklich gut mit Multithreading auskennt würde ich empfehlen den Einsatz mehrerer Threads in &quot;kritischen&quot; Projekten 3x zu überdenken. Threads sind böse, und wenn du 1x nicht hinguckst packen sie dich von hinten, und verprügeln dich mit einem tiefgefrohrenen Murphy <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
</blockquote>
<p>Ich denke das ich schon ein wenig Erfahrung mit Threads habe, allerdings &quot;leider&quot; erst in C#. Hab dort ein relativ großes (kritisches) Projekt realisiert und konnte in einigen Bereichen gar nicht anders, als auf Threads zurückgreifen, was mir (so denke ich) ganz gut gelungen ist.</p>
<p>Also das Grundverständnis sollte eigentlich da sein, nur bei der Umsetzung scheitert es halt Momentan noch ein wenig aufgrund der ungewohnten Sprache, aber das wird schon.</p>
<p>Genug von dem Thema. Mein Problem hab ich ja jetzt anders gelöst und sollte ich wiedereinmal eine solche Lösung benötigen steht hier ja schon eine (hoffentlich) funktionierende Antwort!</p>
<p>danke, mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1175661</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1175661</guid><dc:creator><![CDATA[suamikim]]></dc:creator><pubDate>Thu, 16 Nov 2006 07:47:41 GMT</pubDate></item></channel></rss>