<?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[UpdateData]]></title><description><![CDATA[<p>Grüsse zusammen,</p>
<p>Ich habe mir ein Programm geschrieben, das Dinge sucht und findet und dann während dem weitersuchen bereits die gefundenen Dinge anzeigen soll. Das ganze ist eine Dialog-Anwendung und der Code von der Suche sieht so aus:</p>
<pre><code class="language-cpp">void CSLDKDlg::StartSearch()
{
    UpdateData(TRUE);
    /*
    .
    .
    .
    */
    while(m_nOpenNumbers != 0)
    {
        for(int c = 0; c &lt; nROWCOLCOUNT; c++)
        {
            for(int r = 0; r &lt; nROWCOLCOUNT; r++)
            {
                BFound = m_SoDoKuField[r][c].Search();
                if(BFound)
                {
                    UpdateData(FALSE);
                    Sleep(m_nSleepTime);
                }
                m_nSolvedNumbers += BFound;
                m_nOpenNumbers -= BFound;
                m_ctrlProgressSolution.SetPos(m_nSolvedNumbers);
            }
        }
    }
    /*
    .
    .
    .
    */
    UpdateData(FALSE);
}
</code></pre>
<p>Das UpdateData(FALSE); wird allerdings nie ausgeführt. Bzw. erst ganz am Ende der Schleife wird alles geupdatet und angezeigt. Wie kann ich es nun erreichen, dass meine Editfelder ihr Strings bekommen, während die Suche noch läuft?</p>
<p>Die Zuweisung erfolgt übrigens in der Funktion m_SoDoKuField[r][c].Search(); per Zeiger auf die Strings der jeweiligen Edit-Felder. Also habe nicht irgendwie nur die Zuweisung vergessen. Schliesslich werden sie ja auch am Ende der Funktion alle angezeigt. Hoffe ihr könnt mir helfen.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/144045/updatedata</link><generator>RSS for Node</generator><lastBuildDate>Wed, 15 Jul 2026 22:21:42 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/144045.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 13 Apr 2006 23:39:20 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to UpdateData on Thu, 13 Apr 2006 23:39:20 GMT]]></title><description><![CDATA[<p>Grüsse zusammen,</p>
<p>Ich habe mir ein Programm geschrieben, das Dinge sucht und findet und dann während dem weitersuchen bereits die gefundenen Dinge anzeigen soll. Das ganze ist eine Dialog-Anwendung und der Code von der Suche sieht so aus:</p>
<pre><code class="language-cpp">void CSLDKDlg::StartSearch()
{
    UpdateData(TRUE);
    /*
    .
    .
    .
    */
    while(m_nOpenNumbers != 0)
    {
        for(int c = 0; c &lt; nROWCOLCOUNT; c++)
        {
            for(int r = 0; r &lt; nROWCOLCOUNT; r++)
            {
                BFound = m_SoDoKuField[r][c].Search();
                if(BFound)
                {
                    UpdateData(FALSE);
                    Sleep(m_nSleepTime);
                }
                m_nSolvedNumbers += BFound;
                m_nOpenNumbers -= BFound;
                m_ctrlProgressSolution.SetPos(m_nSolvedNumbers);
            }
        }
    }
    /*
    .
    .
    .
    */
    UpdateData(FALSE);
}
</code></pre>
<p>Das UpdateData(FALSE); wird allerdings nie ausgeführt. Bzw. erst ganz am Ende der Schleife wird alles geupdatet und angezeigt. Wie kann ich es nun erreichen, dass meine Editfelder ihr Strings bekommen, während die Suche noch läuft?</p>
<p>Die Zuweisung erfolgt übrigens in der Funktion m_SoDoKuField[r][c].Search(); per Zeiger auf die Strings der jeweiligen Edit-Felder. Also habe nicht irgendwie nur die Zuweisung vergessen. Schliesslich werden sie ja auch am Ende der Funktion alle angezeigt. Hoffe ihr könnt mir helfen.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1037224</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1037224</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Thu, 13 Apr 2006 23:39:20 GMT</pubDate></item><item><title><![CDATA[Reply to UpdateData on Fri, 14 Apr 2006 08:19:36 GMT]]></title><description><![CDATA[<p>Windows arbeitet mit Nachrichten. Diese muss dein Programm verarbeiten. Normalerweise macht die das Programm selbst.<br />
Hast du aber eine Funktion welche viel Arbeitet dann hat Windows keine Zeit die Nachrichtenwarteschlange zu lesen. Es liegt ja nur ein Tread vor und da werden die Funktionen nicht parallel ausgeführt.<br />
Auch UpdateData teil Windows mit das es eine nachricht an das Fenster senden soll die Variablen in den Dialog zu schreiben.</p>
<p>Zur Lösung: Einen neuen Thread für deine Funktion<br />
Nachteil: Komplex für Anfänger</p>
<p>Zur Lösung: Du ließt die Nachrichtenschlange selbst aus. SChau mal in der FAQ</p>
<p>Zur Lösung: Du rufts UpdateWindow auf.<br />
Nachteil: sehr schlechte Lösung aber einfach.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1037279</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1037279</guid><dc:creator><![CDATA[Unix-Tom]]></dc:creator><pubDate>Fri, 14 Apr 2006 08:19:36 GMT</pubDate></item><item><title><![CDATA[Reply to UpdateData on Fri, 14 Apr 2006 08:38:32 GMT]]></title><description><![CDATA[<p>Eine weitere Loesung waere noch, wenn Du den Text explizit in die Editfelder hineinschreibst; dass passiert dann ja sofort, ohne auf Nachrichten zu warten.</p>
<pre><code class="language-cpp">this-&gt;EditControl.SetWindowText(...);
</code></pre>
<p>Nachteil: Es ist nicht besonders elegant, da man das ganze Nachrichtenkonzept unterwandert :),<br />
und es koennte zu Inkonsistenz mit spaeter erfolgenden Nachrichten kommen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1037286</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1037286</guid><dc:creator><![CDATA[raindrop]]></dc:creator><pubDate>Fri, 14 Apr 2006 08:38:32 GMT</pubDate></item><item><title><![CDATA[Reply to UpdateData on Fri, 14 Apr 2006 16:26:05 GMT]]></title><description><![CDATA[<p>Danke für die Lösungen, ich bin mit UpdateWindow heute auch noch drauf gekommen. Allerdings habe ich eben auch gemerkt, dass sich durch das UpdateData(FALSE); jede Menge von Nachrichten in der Nachrichtenschlaufe anstauen. Sicherlich nicht so eine sinnvolle Lösung.</p>
<p>An den eigenen Thread habe ich zu beginn auch gedacht. Aber habe dann davon abgesehen, da ich es nicht für sinvoll hielt, für so eine kleine Suche extra einen Thread zu eröffnen. Naja am Anfang hatte ich auch noch nicht vor den Dialog immer zu aktualisieren ^^</p>
<p>Den neuen Thread wäre aber glaub ich wirklich die beste Lösung. Und das beste wäre dann wohl, ich sende dem Hauptthread eine Nachricht. Die Frage ist jetzt nur wie ich dem eine Nachricht sende. Habe schon in der MSDN ein wenig rumgesucht. Aber ich finde nur wie ich Nachrichten abfangen kann. Bzw. mit PostMessage eine Nachricht direkt an ein CWnd senden. Aber ich finde nirgends wie ich die Nachricht definieren muss, bzw. wie ich dann meine eigenen Nachricht abfangen kann. Gibt ja bei der Message Map mehrere Möglichkeiten ...</p>
<p>Kann mir dazu vielleicht auch noch schnell jemand weiterhelfen?<br />
Bzw. weiss jemand ein gutes Tutorial zum senden eigener Nachrichten und dessen abfangen?</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1037599</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1037599</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Fri, 14 Apr 2006 16:26:05 GMT</pubDate></item></channel></rss>