<?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[Thread und Update-Geschwindigkeit eines Dialogs]]></title><description><![CDATA[<p>Hallo Leute,<br />
ich habe eine FormView-Anwendung in der ich nur in einem CEdit Feld einen Wert<br />
ausgebe.<br />
Diesen Wert bekomme ich von einem HID und dort von einem Schieberegler.<br />
Dieses HID frage ich in einem extra Thread ab.<br />
Mein Problem ist nun, dass die Darstellung in der View sehr dem Betätigen<br />
des Schiebereglers hinterher eilt.</p>
<p>Hier meine Code-Fragmente:</p>
<p>ich erzeuge einen Thread:</p>
<pre><code class="language-cpp">m_MyThread = AfxBeginThread(MyThreadFunction, MyViewHWND
                  ,THREAD_PRIORITY_NORMAL);
</code></pre>
<p>in meiner FadenFunktion frage ich den HID ab und poste eine Message an<br />
meine View:</p>
<pre><code class="language-cpp">UINT MyThreadFunction(LPVOID pParam)
{
while (TRUE)
{
    Result = ReadFile (...) //als Overlapped Aufruf verknüpft mit MyEvent

    //warten auf das Event der ReadFile Funktion
    Result = WaitForSingleObject (MyEvent, 10);  

    switch (Result)
    {
    case WAIT_OBJECT_0:      //wenn ein neuer Wert da war
    {
        //dann die Nachricht an meinen Dialog
        ::PostMessage((HWND) pParam, WM_MY_MESSAGE, 0, 0);      
        break;
    }
    case WAIT_TIMEOUT:
    {
        Result = CancelIo(...);
        break;
    }
    default:
    {
        Result = CancelIo(...);
        break;
    }
    }
    ResetEvent(MyEvent);
}
}
</code></pre>
<p>In meiner View behandle ich dann die Nachricht<br />
in einer Methode.</p>
<p>Mit den Thread Prioritäten habe ich schon experimentiert. Hatte aber<br />
keinen Erfolg.</p>
<p>Auch schreibe ich den Schieber-Wert noch in eine Variable,<br />
die ich mit einer CriticalSection schütze.</p>
<p>Ich hoffe jemand hat eine Idee, warum meine Ausgabe so nacheilt.</p>
<p>Vielen Dank!</p>
<p>pantau</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/68284/thread-und-update-geschwindigkeit-eines-dialogs</link><generator>RSS for Node</generator><lastBuildDate>Sat, 06 Jun 2026 21:10:48 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/68284.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 16 Mar 2004 16:34:36 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Thread und Update-Geschwindigkeit eines Dialogs on Tue, 16 Mar 2004 16:34:36 GMT]]></title><description><![CDATA[<p>Hallo Leute,<br />
ich habe eine FormView-Anwendung in der ich nur in einem CEdit Feld einen Wert<br />
ausgebe.<br />
Diesen Wert bekomme ich von einem HID und dort von einem Schieberegler.<br />
Dieses HID frage ich in einem extra Thread ab.<br />
Mein Problem ist nun, dass die Darstellung in der View sehr dem Betätigen<br />
des Schiebereglers hinterher eilt.</p>
<p>Hier meine Code-Fragmente:</p>
<p>ich erzeuge einen Thread:</p>
<pre><code class="language-cpp">m_MyThread = AfxBeginThread(MyThreadFunction, MyViewHWND
                  ,THREAD_PRIORITY_NORMAL);
</code></pre>
<p>in meiner FadenFunktion frage ich den HID ab und poste eine Message an<br />
meine View:</p>
<pre><code class="language-cpp">UINT MyThreadFunction(LPVOID pParam)
{
while (TRUE)
{
    Result = ReadFile (...) //als Overlapped Aufruf verknüpft mit MyEvent

    //warten auf das Event der ReadFile Funktion
    Result = WaitForSingleObject (MyEvent, 10);  

    switch (Result)
    {
    case WAIT_OBJECT_0:      //wenn ein neuer Wert da war
    {
        //dann die Nachricht an meinen Dialog
        ::PostMessage((HWND) pParam, WM_MY_MESSAGE, 0, 0);      
        break;
    }
    case WAIT_TIMEOUT:
    {
        Result = CancelIo(...);
        break;
    }
    default:
    {
        Result = CancelIo(...);
        break;
    }
    }
    ResetEvent(MyEvent);
}
}
</code></pre>
<p>In meiner View behandle ich dann die Nachricht<br />
in einer Methode.</p>
<p>Mit den Thread Prioritäten habe ich schon experimentiert. Hatte aber<br />
keinen Erfolg.</p>
<p>Auch schreibe ich den Schieber-Wert noch in eine Variable,<br />
die ich mit einer CriticalSection schütze.</p>
<p>Ich hoffe jemand hat eine Idee, warum meine Ausgabe so nacheilt.</p>
<p>Vielen Dank!</p>
<p>pantau</p>
]]></description><link>https://www.c-plusplus.net/forum/post/481891</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/481891</guid><dc:creator><![CDATA[pantau]]></dc:creator><pubDate>Tue, 16 Mar 2004 16:34:36 GMT</pubDate></item><item><title><![CDATA[Reply to Thread und Update-Geschwindigkeit eines Dialogs on Tue, 16 Mar 2004 19:16:17 GMT]]></title><description><![CDATA[<p>ich hatte kürlich ein ähnliches problem..<br />
Ich habe eine Datei kopiert in einem Thread und wollte den Forstschritte Ajtuakisieren im Dialog aber...</p>
<p>Dieses Probkem löste indem ich meinem Thread nicht meine DateiObjekt übergabe sondern den Dialog selbst der auch die Objekte beinhaltet, in deinem Fall wenn deine FormView dein HID besitzt dann über dein FormView und rufe von Ihr PostMessage auf.</p>
<p>Bspl.</p>
<pre><code class="language-cpp">UINT CTCOPYDlg::CopyThread(LPVOID pParam)
{
   CTCOPYDlg* pDlg = (CTCOPYDlg)pParam;
   pDlg-&gt;PostMessage();
}
</code></pre>
<p>ich hoffe dies konnte dir weiterhelfen...<br />
ich bin noch nicht so fortgeschritten... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/482025</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/482025</guid><dc:creator><![CDATA[T1c4L]]></dc:creator><pubDate>Tue, 16 Mar 2004 19:16:17 GMT</pubDate></item><item><title><![CDATA[Reply to Thread und Update-Geschwindigkeit eines Dialogs on Tue, 16 Mar 2004 19:17:36 GMT]]></title><description><![CDATA[<p>für die grossen schreibfehler...<br />
bin gerade etwas angeheitert....</p>
<p><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>
]]></description><link>https://www.c-plusplus.net/forum/post/482027</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/482027</guid><dc:creator><![CDATA[T1c4L]]></dc:creator><pubDate>Tue, 16 Mar 2004 19:17:36 GMT</pubDate></item><item><title><![CDATA[Reply to Thread und Update-Geschwindigkeit eines Dialogs on Wed, 17 Mar 2004 16:42:45 GMT]]></title><description><![CDATA[<p>Hallo T1c4L,<br />
vielen Dank zuerst!<br />
Dein Vorschlag brachte leider keine Verbesserung, aber er hat mich zu der Quelle des Übels gebracht:</p>
<pre><code class="language-cpp">UNINT MyThreadFunction(LPVOID pParam)
{
  while (true)
  {
     //als Overlapped implementiert  
     Result = ReadFile(FileHandle1, &amp;MyEvent1 ...);   
     Result = WaitForSingleObject (MyEvent1,	0);

     if (Result == WAIT_OBJECT_0)
       PosteAnView();
     else
       Result = CancelIo(FileHandle1);

     //als Overlapped implementiert  
     Result = ReadFile(FileHandle2, &amp;MyEvent2 ...);  
     Result = WaitForSingleObject (MyEvent2,	0);  

     if (Result == WAIT_OBJECT_0)
       PosteAnView();
     else
       Result = CancelIo(FileHandle2);  //Auskommentieren hilft
  }
}
</code></pre>
<p>Wenn ich in meiner Thread Funktion das zweite CancelIo(FileHandle2) auskommentiere wird meine Ausgabe in der View normal schnell. Wenn ich es drin lasse ist die Ausgabe nur im Schneckentempo. Leider brauche ich das zweite CancelIo natürlich, weil ich sonst nach einem TIME_OUT das zweite HANDLE nicht auslesen kann.<br />
Ich bin echt ratlos und am Freitag will ich in Urlaub, da sollte ich eine Lösung haben <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>
<p>Liebe Grüße<br />
pantau</p>
]]></description><link>https://www.c-plusplus.net/forum/post/482818</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/482818</guid><dc:creator><![CDATA[pantau]]></dc:creator><pubDate>Wed, 17 Mar 2004 16:42:45 GMT</pubDate></item><item><title><![CDATA[Reply to Thread und Update-Geschwindigkeit eines Dialogs on Thu, 18 Mar 2004 13:11:31 GMT]]></title><description><![CDATA[<p>Hi alle zusammen,</p>
<p>Ich habe in meiner Anwendung was gemacht, was glaube ich nicht so gut ist:<br />
Um zu sehen, ob das HID noch immer da ist, habe ich in der Schleife immer<br />
HidD_GetInputReport(Handle, ByteArray, NumberOfBytes);<br />
aufgerufen. Wenn ich das auskommentiere ist gut.<br />
Ich kontrolliere jetzt ob das HID da ist mit der Message WM_DEVICECHANGE,<br />
nachdem ich meine View dafür registriert habe (mit<br />
RegisterDeviceNotification()).<br />
Jetzt muß ich bei mir nur noch das Versions Durcheinader (VC++ 6.0, DDK von<br />
2002)<br />
auf meinem Rechner in Ordnung bringen. Ich kann das Programm nicht mit<br />
meinem Compiler übersetzten,<br />
ohne die Option /WINVER=0x0500 anzugeben.</p>
<p>Und heute abend gehe in Urlaub!</p>
<p>Viele Grüße<br />
Marcus Bleil</p>
]]></description><link>https://www.c-plusplus.net/forum/post/483453</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/483453</guid><dc:creator><![CDATA[pantau]]></dc:creator><pubDate>Thu, 18 Mar 2004 13:11:31 GMT</pubDate></item></channel></rss>