<?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[Prozessorbelastung auslesen und graphisch darstellen]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich würde gerne für mein Programm die CPU-Belastung (evtl. auch Speicherauslastung) auslesen und diese graphisch darstellen.</p>
<p>Die graphische Darstellung sollte evtl. als Balken mit dazugehörigem Prozentwert der Auslastung geschehen. Das ganze dynamisch, damit sich Anzeige auch relativ schnell auf Veränderungen reagiert.</p>
<p>Des Weiteren würde mich interessieren, ob man Verhindern, bzw. ob es überhaupt vorkommen kann, dass ein Programm bei längerer Lauf- und Rechenzeit &quot;keine Rückmeldung&quot; gibt, obwohl kein Programmfehler besteht. Also ein &quot;Einfrieren&quot; aus der intensiven Berechnung erfolgen kann.</p>
<p>Falls so ein Fall auftreten kann, wie steuert man dem entgegen?</p>
<p>Vielen Dank für eure Hilfe.<br />
Liebe Grüße<br />
Todd</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/196089/prozessorbelastung-auslesen-und-graphisch-darstellen</link><generator>RSS for Node</generator><lastBuildDate>Tue, 18 Aug 2026 12:16:02 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/196089.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 25 Oct 2007 10:55:46 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Prozessorbelastung auslesen und graphisch darstellen on Thu, 25 Oct 2007 10:55:46 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich würde gerne für mein Programm die CPU-Belastung (evtl. auch Speicherauslastung) auslesen und diese graphisch darstellen.</p>
<p>Die graphische Darstellung sollte evtl. als Balken mit dazugehörigem Prozentwert der Auslastung geschehen. Das ganze dynamisch, damit sich Anzeige auch relativ schnell auf Veränderungen reagiert.</p>
<p>Des Weiteren würde mich interessieren, ob man Verhindern, bzw. ob es überhaupt vorkommen kann, dass ein Programm bei längerer Lauf- und Rechenzeit &quot;keine Rückmeldung&quot; gibt, obwohl kein Programmfehler besteht. Also ein &quot;Einfrieren&quot; aus der intensiven Berechnung erfolgen kann.</p>
<p>Falls so ein Fall auftreten kann, wie steuert man dem entgegen?</p>
<p>Vielen Dank für eure Hilfe.<br />
Liebe Grüße<br />
Todd</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1391750</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1391750</guid><dc:creator><![CDATA[Todd]]></dc:creator><pubDate>Thu, 25 Oct 2007 10:55:46 GMT</pubDate></item><item><title><![CDATA[Reply to Prozessorbelastung auslesen und graphisch darstellen on Thu, 25 Oct 2007 11:10:29 GMT]]></title><description><![CDATA[<p>Zur ersten Frage kann ich nix sagen, das wird wohl nur über die WinAPI gehen.</p>
<p>Zur zweiten Frage: Ja, wenn ein Programm lang andauernde Berechnungen ausführt, wird es im Task-Manager mit dem Status 'Keine Rückmeldung' angezeigt.<br />
Entweder fügt man an geeigneten Stellen Application-&gt;ProcessMessages() ein (in Schleifen ist es ratsam, das nicht bei jedem Durchlauf zu machen, hängt aber auch von der Laufzeit eines einzelnen Schleifendurchlaufs ab), oder man lagert die lang andauernden Berechnungen in einen Thread aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1391758</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1391758</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 25 Oct 2007 11:10:29 GMT</pubDate></item><item><title><![CDATA[Reply to Prozessorbelastung auslesen und graphisch darstellen on Thu, 25 Oct 2007 11:26:51 GMT]]></title><description><![CDATA[<p>Danke für deine Antwort.</p>
<p>Mein Programm führt einen Code innerhalb einer .dll aus.</p>
<p>Diese dll wurde nicht in C sondern in Matlab geschrieben.<br />
Die eigentliche Programmausführung wird daher auch nicht von meinem C-Programm gesteuert, sondern von der externen Matlab Component Runtime (vergleichbar mit einer Java Runtime).</p>
<p>Das C-Programm nimmt vom Nutzer Daten an. Wandelt diese für die .dll um und übergibt diese der .dll.</p>
<p>Danach läuft die Berechnung und das C-Programm wartet auf den Rückgabewert.</p>
<p>Da ich ja quasi das Hauptprogramm verlasse ist es dann dennoch möglich ProzessMessages() abzuschicken?</p>
<p>Das ist leider ein Thema bei dem ich noch meine Schwierigkeiten habe. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Liebe Grüße<br />
Todd</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1391781</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1391781</guid><dc:creator><![CDATA[Todd]]></dc:creator><pubDate>Thu, 25 Oct 2007 11:26:51 GMT</pubDate></item><item><title><![CDATA[Reply to Prozessorbelastung auslesen und graphisch darstellen on Thu, 25 Oct 2007 12:10:47 GMT]]></title><description><![CDATA[<p>Nein, da auf den Rückgabewert gewartet wird, hast Du keine Möglichkeit 'Application-&gt;ProcessMessages()' auszuführen. Hier hilft nur, den Aufruf der DLL in einen Thread auszulagern. Dieser läuft dann getrennt vom Applikationsthread und somit wird der Applikationsthread auch nicht mehr angehalten == Programm 'friert' nicht mehr ein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1391815</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1391815</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 25 Oct 2007 12:10:47 GMT</pubDate></item><item><title><![CDATA[Reply to Prozessorbelastung auslesen und graphisch darstellen on Thu, 25 Oct 2007 12:14:22 GMT]]></title><description><![CDATA[<p>Danke für deine Antwort.</p>
<p>Was genau ist ein Thread und wie lege ich einen neuen an?</p>
<p>Danke für die Hilfe und<br />
liebe Grüße</p>
<p>Todd</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1391817</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1391817</guid><dc:creator><![CDATA[Todd]]></dc:creator><pubDate>Thu, 25 Oct 2007 12:14:22 GMT</pubDate></item><item><title><![CDATA[Reply to Prozessorbelastung auslesen und graphisch darstellen on Thu, 25 Oct 2007 12:21:22 GMT]]></title><description><![CDATA[<p>Da wird es dann ein bißchen komplexer... <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>Du solltest Dir in der BCB-Hilfe zuerst Mal TThread ansehen. Da hast Du schon eine Menge zu lesen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1391826</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1391826</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 25 Oct 2007 12:21:22 GMT</pubDate></item><item><title><![CDATA[Reply to Prozessorbelastung auslesen und graphisch darstellen on Thu, 25 Oct 2007 12:35:53 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Auch das Builder-Tutorial ist hier hilfreich.<br />
<a href="http://bcb-tutorial.c-plusplus.net/Thread/index.html" rel="nofollow">http://bcb-tutorial.c-plusplus.net/Thread/index.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1391839</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1391839</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Thu, 25 Oct 2007 12:35:53 GMT</pubDate></item><item><title><![CDATA[Reply to Prozessorbelastung auslesen und graphisch darstellen on Thu, 25 Oct 2007 12:37:03 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Auch unser <a href="http://bcb-tutorial.c-plusplus.net/inhalt.html" rel="nofollow">Forumstutorial</a> hat einen Abschnitt zu Threads.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1391841</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1391841</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Thu, 25 Oct 2007 12:37:03 GMT</pubDate></item><item><title><![CDATA[Reply to Prozessorbelastung auslesen und graphisch darstellen on Thu, 25 Oct 2007 12:49:38 GMT]]></title><description><![CDATA[<p>Danke werde mich schlau machen. Falls dann noch Fragen offen sind, werde ich mich sicherlich wieder hier melden.</p>
<p>Ich habe in der Zwischenzeit das Schlagwort &quot;BackroundWorker&quot; im Zusammenhang mit Threads gehört und gleich mal gegoogelt.</p>
<p>Es sieht viel und hört sich nach dem was ich hier erfahren habe auch unkomplizierter an.</p>
<p>Hat jemand damit schon Erfahrungen gemacht und kann den Aufwand zwischen dieser und der Thread Methode abschätzen?</p>
<p>Hier der Link zum Thema: (falls es jemanden interessiert <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /> )</p>
<p><a href="http://msdn2.microsoft.com/de-de/library/8xs8549b(VS.80).aspx" rel="nofollow">http://msdn2.microsoft.com/de-de/library/8xs8549b(VS.80).aspx</a></p>
<p>Liebe Grüße<br />
Todd</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1391855</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1391855</guid><dc:creator><![CDATA[Todd]]></dc:creator><pubDate>Thu, 25 Oct 2007 12:49:38 GMT</pubDate></item><item><title><![CDATA[Reply to Prozessorbelastung auslesen und graphisch darstellen on Thu, 25 Oct 2007 13:26:05 GMT]]></title><description><![CDATA[<p>ASPX ist doch .NET, also im BCB nicht verwendbar. Oder übersehe ich etwas?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1391892</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1391892</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 25 Oct 2007 13:26:05 GMT</pubDate></item><item><title><![CDATA[Reply to Prozessorbelastung auslesen und graphisch darstellen on Thu, 25 Oct 2007 13:38:13 GMT]]></title><description><![CDATA[<p>Nein, du übersiehst nichts. <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/1391904</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1391904</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Thu, 25 Oct 2007 13:38:13 GMT</pubDate></item><item><title><![CDATA[Reply to Prozessorbelastung auslesen und graphisch darstellen on Fri, 26 Oct 2007 10:43:46 GMT]]></title><description><![CDATA[<p><strong><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/17727">@Todd</a>:</strong><br />
Wie bringst du MatLab und ne graphische Oberfläche erstellt mit Borland unter einen Hut? Ist mal so ne Interessefrage. <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/1392398</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1392398</guid><dc:creator><![CDATA[Maffe001]]></dc:creator><pubDate>Fri, 26 Oct 2007 10:43:46 GMT</pubDate></item><item><title><![CDATA[Reply to Prozessorbelastung auslesen und graphisch darstellen on Fri, 26 Oct 2007 14:50:56 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>danke für das Interesse.</p>
<p>Das ist eigentlich ganz einfach.<br />
Tauschen wir unser Wissen auf. Du erklärst mir wie ich das mit den Multi-Threads mache und ich erkläre wie die Einbindung von Matlab Code in ein C-Programm (BCB) funktioniert. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_savoring_food"
      title=":yum:"
      alt="😋"
    /></p>
<p>Liebe Grüße<br />
Todd</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1392594</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1392594</guid><dc:creator><![CDATA[Todd]]></dc:creator><pubDate>Fri, 26 Oct 2007 14:50:56 GMT</pubDate></item><item><title><![CDATA[Reply to Prozessorbelastung auslesen und graphisch darstellen on Fri, 26 Oct 2007 17:53:38 GMT]]></title><description><![CDATA[<p>Kann ich machen. Also prinzipiell ist mir die ganze Nummer mit C/C++ und MatLab ja klar. Zu mindest wenn man ein Mex-File schreiben will, dass dann von MatLab über die <em>mexFunction(...)</em> aufgerufen werden soll.<br />
Nur die Nummer mit der graphischen Oberfläche von Borland ist mir jetzt nicht ganz klar.</p>
<p>Tja, für das Multithreading kannst du entweder die Borland-Klasse <strong>TThread</strong> (keine Ahnung, wie die funktioniert. Hab sie noch nie verwendet.) benutzen oder du schaust dir die Winapi mit <a href="http://msdn2.microsoft.com/en-us/library/ms682453.aspx" rel="nofollow">CreateThread</a> und Konsorten an, welche ich nun wieder rum verwende oder auch verwendet habe um Multithreading unter Matlab möglich zu machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1392667</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1392667</guid><dc:creator><![CDATA[Maffe001]]></dc:creator><pubDate>Fri, 26 Oct 2007 17:53:38 GMT</pubDate></item><item><title><![CDATA[Reply to Prozessorbelastung auslesen und graphisch darstellen on Fri, 26 Oct 2007 19:06:24 GMT]]></title><description><![CDATA[<p>Hierfür sollte ein Standard-TThread völlig ausreichend sein. Hier gibt es auch irgendwo ein Tutorial zu TThread, ich bin nur zu faul den Link zu suchen. <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>Schau Dir das Tutorial an... Bei Problemem helfen wir gerne weiter.</p>
<p>Grüße Joe_M.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1392723</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1392723</guid><dc:creator><![CDATA[zufaulzumeinloggen]]></dc:creator><pubDate>Fri, 26 Oct 2007 19:06:24 GMT</pubDate></item><item><title><![CDATA[Reply to Prozessorbelastung auslesen und graphisch darstellen on Fri, 26 Oct 2007 20:25:08 GMT]]></title><description><![CDATA[<p>Hallo Joe_M,</p>
<p>da nehm ich dich dann aber beim Wort. Bin mir sicher, dass ich auch nach dem Durchlesen der Tutorials und der Hilfe meine Schwierigkeiten haben werde.<br />
Und dann aber bitte keine Verweise mehr auf Sachen zum Lesen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>Okay, wie fügt man Matlab Code in ein C-Projekt ein.<br />
Beispiel am BCB6:</p>
<pre><code>1. Schritt: Schreiben des m-Files unter Matlab, z.B.

            function y = foo(x)
            y = 2*x;

2. Schritt: Kompilieren des m-Files aus Auslagern des Codes in eine C-Shared 
            Library; Auf der Kommandozeile:

            &gt;&gt; mcc -W lib:foo -T link:lib foo.m

   Jetzt entsteht: foo.h, foo.c, foo.ctf, foo.dll
   foo.h und foo.dll müssen später ins BCB Projekt inkludiert werden und 
   foo.ctf muss später im Anwenderverzeichnis liegen!

3. Schritt: Das BCB Projekt

   Um die .dll ansprechen und ausführen zu können, muss auf dem späteren System
   unbedingt eine Matlab Component Runtime installiert sein, sowie das ctf 
   Archiv im Anwenderverzeichnis vorhanden sein. Die MCR wird standardmäßig zu 
   jeder Matlab Version mit Compiler Toolbox mitgeliefert und kann weitergeben
   werden.

   Außerdem müssen die Verzeichnisse &lt;matlabroot&gt;extern\include 
   sowie                             &lt;matlabroot&gt;extern\lib\win32\borland
   mit unter den Projektoptionen eingebunden werden!

   Alle Ein- und Ausgabeparameter, ganz egal welchen Typs sie sind(Double, int,
   CellArray, StructArray etc.) haben in C den mxArray Typ.

Zu BCB
</code></pre>
<pre><code class="language-cpp">include &lt;vcl.h&gt;
#pragma hdrstop

#include &quot;Unit1.h&quot;
#include &quot;foo.h&quot;
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource &quot;*.dfm&quot;
void display(const mxArray* in);
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
 //Aufruf der MCR
   mclInitializeApplication(NULL,0); 

 //Deklaration der Ein- und Ausgabeparameter
   mxArray *in1;
   mxArray *y = NULL;

 //Beispieldaten zur Eingabe   
 double data[] = {1,2,3,4,5,6,7,8,9,10};

 //Anlegen eines Spaltenvektors mit Doublewerten der Dim (10,1)
 in1 = mxCreateDoubleMatrix(10,1,mxREAL);
 memcpy(mxGetPr(in1), data, 10*sizeof(double));

 //Laden der .dll
 if (!fooInitialize())
 {
  ShowMessage(&quot;Fehler beim Laden der dll&quot;);
  return;
 }       

 //Aufruf der Funktion mlfFoo und Übergabe Ein- und Ausgabeparameter
 mlfFoo(1, &amp;y, 1, &amp;in1);

 //Zugriff auf den Rückgabewert
 display(y);

 //Destroy Array, Speicher freigeben
 mxDestroyArray(y); y=0;
 mxDestroyArray(in1); in1=0;

}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &amp;Action)
{
 //Terminiere die .dll und MCR
 fooTerminate();
 mclTerminateApplication();   

}
//---------------------------------------------------------------------------
void display(const mxArray* in)
{
    int i=0;
    int r=0; 

    //Zeiger auf das mxArray (Rückgabewert)
    double *data; 

    //mxGetM = Anzahl der Zeilen im Rückgabewert
    r = mxGetM(in);

    //Zeiger auf den Vektor
    data = mxGetPr(in);

    //Ausgabe der Daten 
    for( i = 0; i &lt; c; i++ )
    Form1-&gt;StringGrid1-&gt;Cells[0][i]=data[i];

}
</code></pre>
<p>Das wars eigentlich schon. Die eigentliche Berechnung erledigt dann die MCR.<br />
Mann muss sich nur noch um die korrekte Deklaration der Ein- und Ausgabewerte kümmern und um die korrekte Übergabe etc.</p>
<p>Das ganze funktioniert in gleicherweise mit Strukturen, Cell-Arrays, Matrizen etc...</p>
<p>Und für genau so eine Berechnung bräuchte ich einen zweiten Thread.<br />
Beginn vor dem Aufruf der Funktion mlfFoo, da er dann in die .dll geht und auf den Rückgabewert wartet.</p>
<p>Hoffe ich konnte die ganze Thematik einigermaßen verständlich erklären.</p>
<p>Liebe Grüße und schönes WE<br />
Todd</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1392750</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1392750</guid><dc:creator><![CDATA[Todd]]></dc:creator><pubDate>Fri, 26 Oct 2007 20:25:08 GMT</pubDate></item><item><title><![CDATA[Reply to Prozessorbelastung auslesen und graphisch darstellen on Sat, 27 Oct 2007 11:24:38 GMT]]></title><description><![CDATA[<p>Aha, gut auf dem Weg hab ich mit Matlab noch nie gearbeitet. Ich denke mal, das ist sinnvoll, wenn man Simulationsberechnungen oder komplexere mathematischen Berechnungen machen will. Da Matlab solche Sachen ja schon implementiert hat, brauch man sich dann nicht die Arbeit machen und alles selbst schreiben.</p>
<p>Dann hier mal der WinApi-Weg:</p>
<pre><code class="language-cpp">DWORD stelleBerechnungAn(LPVOID ThrParam); //Aussehen einer startfähigen Funktion

//zum Starten dann selber, braucht man

HANDLE hThr = NULL;
DWORD ThrId = 0;

hThr = ::CreateThread(NULL, 0, stelleBerechnungAn, NULL, 0, &amp;ThrId);
if (hThr == INVALID_HANDLE_VALUE)                 // ^
{ /*Fehlerbehandlung*/ }                          // |
                            //falls Parameter in die Funktion sollen, dort
                            //den Zeiger übergeben
</code></pre>
<p>Eleganter wäre es allerdings die Funktion als Member einer Klasse zu implementieren und die Klasse dann selbst als Parameter zu übergeben.<br />
Wichtig ist dann nur das <em>stelleBerechnungAn(...)</em> static ist.</p>
<p>Na vielleicht hilft's dir ja. Wenn du die <strong>TThread</strong>-Klasse nimmst, musst du dich dann wohl an die anderen halten. <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/1392947</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1392947</guid><dc:creator><![CDATA[Maffe001]]></dc:creator><pubDate>Sat, 27 Oct 2007 11:24:38 GMT</pubDate></item><item><title><![CDATA[Reply to Prozessorbelastung auslesen und graphisch darstellen on Sat, 27 Oct 2007 18:59:19 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich hab mich jetzt mal dazu entschlossen die WinAPI zu benutzen.<br />
Scheint mir irgendwie besser zu gefallen.</p>
<pre><code class="language-cpp">//---------------------------------------------------------------------------

#include &lt;vcl.h&gt;
#pragma hdrstop

#include &quot;Unit1.h&quot;
#include &quot;windows.h&quot;
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource &quot;*.dfm&quot;
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
DWORD WINAPI MyThread( LPVOID lpParam ) 
{
 for (int i=1;i&lt;100000;i++)
 Memo1-&gt;Lines-&gt;Add(&quot;Neuer Thread&quot;);
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 LPDWORD dwThreadId;
 CreateThread(NULL, 0, MyThread, NULL, 0, NULL);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
 ShowMessage(&quot;HauptThread&quot;);        
}
//---------------------------------------------------------------------------
</code></pre>
<p>Ist das jetzt schon mal so okay? Es funktioniert jedenfalls. Kann Button2 betätigen, während die Eintragung in das Memofeld noch stattfindet.</p>
<p>Also ist jetzt erstmal ein kleiner Ansatz, bin aber schonmal begeistert, dass es bis jetzt zumindest funktioniert. <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="😮"
    /></p>
<p>Zum Thema Matlab Code:</p>
<p>Es eignet sich hervorragend zur mathematischen Berechnungen und in Folge dessen auch zur Programmierung. Für welche, die wie ich Matlab schon seit Jahren nutzen ist es zehnmal leichter damit umzugehen als eine Programmierung in C++ zu starten.</p>
<p>Deshalb nutze ich die Schnittstelle zwischen C und Matlab. Die Programmierung im BCB hat für mich nur den Sinn, eine schöne, bedienerfreundliche und unabhängige Software zu entwickeln.</p>
<p>Danke schonmal für eure Hinweise und liebe Grüße<br />
Todd</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1393236</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1393236</guid><dc:creator><![CDATA[Todd]]></dc:creator><pubDate>Sat, 27 Oct 2007 18:59:19 GMT</pubDate></item><item><title><![CDATA[Reply to Prozessorbelastung auslesen und graphisch darstellen on Sat, 27 Oct 2007 21:52:26 GMT]]></title><description><![CDATA[<p>Hmm, also das sieht sehr einfach gehalten aus. Du solltest wenigstens eine Fehlerabfrage nach der Erstellung einbauen. Kann ja sein, dass irgendwas bei der Erstellung schief geht und so merkst du's nicht mal.<br />
Ausserdem ist es auch sinnvoll sich ein Handle von dem Thread zu holen, so dass du beim Schliessen deiner Anwendung den Thread über <em>TerminateThread(...)</em> abschiessen kannst. Allerdings sollte das wirklich nur der letzte Ausweg sein.</p>
<p>Ich muss dir dringend davon abraten, so unsauber einen Thread zu implementieren, da du so völlig die Kontrolle über den Thread aufgibst. Aber ich geh mal davon aus, dass das jetzt nur Beispielcode ist und du nachher in deinem Programm etwas sauberer arbeiten wirst. <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/1393355</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1393355</guid><dc:creator><![CDATA[Maffe001]]></dc:creator><pubDate>Sat, 27 Oct 2007 21:52:26 GMT</pubDate></item><item><title><![CDATA[Reply to Prozessorbelastung auslesen und graphisch darstellen on Sun, 28 Oct 2007 09:27:56 GMT]]></title><description><![CDATA[<p>Ja klar,</p>
<p>das war jetzt erstmal ein erster Versuch.<br />
Das da noch Fehlerabfragen etc. eingebaut müssen, ist mir bewusst.</p>
<p>Aber der prinzipielle Aufbau ist richtig oder?<br />
Terminiert sich der neue Thread automatisch nach der Bearbeitung oder muss man zwingend den zweiten Thread schließen, nach dem er abgearbeitet ist?</p>
<p>Liebe Grüße<br />
Todd</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1393472</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1393472</guid><dc:creator><![CDATA[Todd]]></dc:creator><pubDate>Sun, 28 Oct 2007 09:27:56 GMT</pubDate></item><item><title><![CDATA[Reply to Prozessorbelastung auslesen und graphisch darstellen on Sun, 28 Oct 2007 09:41:27 GMT]]></title><description><![CDATA[<p>Also so bald die Funktion verlassen wird, ist der Thread auch beendet. Doch es kann ja sein, dass die MCR abstürzt, sich verklemmt etc. Und schon steckt der Thread fest. Deswegen kann es sein, dass du den Thread dann mit Gewalt beenden musst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1393476</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1393476</guid><dc:creator><![CDATA[Maffe001]]></dc:creator><pubDate>Sun, 28 Oct 2007 09:41:27 GMT</pubDate></item><item><title><![CDATA[Reply to Prozessorbelastung auslesen und graphisch darstellen on Sun, 28 Oct 2007 09:47:08 GMT]]></title><description><![CDATA[<p>Okay danke, dann weiß ich bescheid.</p>
<p>Liebe Grüße<br />
Todd</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1393480</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1393480</guid><dc:creator><![CDATA[Todd]]></dc:creator><pubDate>Sun, 28 Oct 2007 09:47:08 GMT</pubDate></item><item><title><![CDATA[Reply to Prozessorbelastung auslesen und graphisch darstellen on Mon, 29 Oct 2007 09:37:17 GMT]]></title><description><![CDATA[<p>Fragen zu WinAPI-Threads dann bitte im WinAPI-Forum stellen... <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>Aber der prinzipielle Aufbau ist nicht richtig:<br />
Du greifst aus dem Thread heraus auf Komponenten in Form1 zu. Form1 läuft allerdings im Kontext des Answendungs-Threads. Hier mußt Du zwingend eine Absicherung schaffen, damit nicht beide Threads gleichzeitig auf Memo1 zugreifen können, sondern immer nur einer nach dem anderen (zB mittels einer CriticalSection).<br />
Wenn Du TThread verwenden würdest, könntest Du dessen Synchronize-Methode verwenden und müßtest Dich nicht selbst um den Zugriffsschutz kümmern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1393980</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1393980</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 29 Oct 2007 09:37:17 GMT</pubDate></item><item><title><![CDATA[Reply to Prozessorbelastung auslesen und graphisch darstellen on Tue, 30 Oct 2007 08:27:40 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>meine Frage hat sich während den Diskussionen wohl ein wenig von seiner Ausgangssituation weg bewegt. Wenn ich wieder Fragen zur WinAPI habe, dann im WinAPI Forum.</p>
<p>Jetzt aber nochmal zurückzukommen:</p>
<p>Das mit dem Memo war nur ein Beispiel. Verstehe aber was du meinst.</p>
<p>Aber was ist mit folgenden Szenario (versuche nämlich alles um die primitive Methode, die ich wenigstens auf Anhieb verstanden habe zu retten):</p>
<p>Im zweiten Thread wird nur die .dll aufgerufen.<br />
In der Zwischenzeit, werden alle relevanten Objekte auf der Oberfläche deaktiviert.<br />
Es ist dem Nutzer also nicht möglich weitere Eingaben zu machen, geschweige denn einen neuen Thread zu starten bzw. auf die .dll zuzugreifen.</p>
<p>Der Nutzer wird ständig über den Fortschritt der Berechnungen informiert.<br />
Nach dem die .dll durchgelaufen ist, wird ein Rückgabewert zurückgegeben.<br />
Dieser Rückgabewert wird dem Hauptprogramm und daher dem Haupt-Thread übergeben. Der zweite zusätzliche Thread ist jetzt geschlossen.<br />
Die Ergebnisse werden in einem RichEdit ausgegeben und alles ist in Ordnung, oder?</p>
<p>MfG<br />
Todd</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1394496</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1394496</guid><dc:creator><![CDATA[Todd]]></dc:creator><pubDate>Tue, 30 Oct 2007 08:27:40 GMT</pubDate></item><item><title><![CDATA[Reply to Prozessorbelastung auslesen und graphisch darstellen on Tue, 30 Oct 2007 15:56:59 GMT]]></title><description><![CDATA[<p>Todd schrieb:</p>
<blockquote>
<p>Es ist dem Nutzer also nicht möglich weitere Eingaben zu machen, geschweige denn einen neuen Thread zu starten bzw. auf die .dll zuzugreifen.</p>
<p>Der Nutzer wird ständig über den Fortschritt der Berechnungen informiert.<br />
Nach dem die .dll durchgelaufen ist, wird ein Rückgabewert zurückgegeben.<br />
Dieser Rückgabewert wird dem Hauptprogramm und daher dem Haupt-Thread übergeben. Der zweite zusätzliche Thread ist jetzt geschlossen.<br />
Die Ergebnisse werden in einem RichEdit ausgegeben und alles ist in Ordnung, oder?</p>
</blockquote>
<p>Nein, denn auch wenn Du dem User keine Aktonen gestattest, kann es zu konkurienden Zugriffen kommen. Dazu reicht schon völlig aus, das Formular zu verschieben. Dabei kann es schon geschehen, dass der Hauptthread auf das RichEdit zugreift, während Du es aus dem Arbeitsthread gerade befüllst -&gt; bestenfalls eine Fehlermeldung a la 'auf dem Canvas kann nicht gezeichnet werden', schlimmstenfalls ein kompletter Absturz.<br />
Bei allen Zugriffen auf irgendetwas, das nicht im Kontext des Threads erzeugt wurde, MUSST Du eine Absicherung schaffen. Bei einem RichEdit ist das praktisch schon so gut wie unmöglich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1394725</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1394725</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 30 Oct 2007 15:56:59 GMT</pubDate></item><item><title><![CDATA[Reply to Prozessorbelastung auslesen und graphisch darstellen on Tue, 30 Oct 2007 17:05:05 GMT]]></title><description><![CDATA[<p>Danke für deine Hilfe.</p>
<p>Dann doch den TThread von Borland benutzen....<br />
Heieiei<br />
Ich werde mir nochmal das Beispiel von Borland ansehen und versuchen dort durchzusteigen.</p>
<p>Falls ich es dann immernoch nicht kapiert hab, melde ich mich wieder.</p>
<p>Liebe Grüße<br />
Todd</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1394758</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1394758</guid><dc:creator><![CDATA[Todd]]></dc:creator><pubDate>Tue, 30 Oct 2007 17:05:05 GMT</pubDate></item></channel></rss>