<?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[Frage zu Threads]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich bin gerade dabei ein Kopiervorgang zu starten und dann zu überwachen.</p>
<p>Dazu möchte ich den Vorgang über CopyFile(); auslagern in einen Thread.</p>
<p>Hab mich dort jetzt mal etwas durch &quot;geklickt&quot; und Frage mich gerade wie ich den<br />
Thread selber starte? Wenn ich extern ein Objekt des Threds anlege und dann so eine Funktion aufrufe wartet die Anwendung selber noch auf den Abschluß das scheint also nicht der richtige Weg zu sein <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="😉"
    /> Execute() selbst aber ist _protected und das sicherlich mit gutem Grund... Nun gelange ich aber ans Ende meines Wissens.</p>
<p>Der Code sieht zZ so aus:</p>
<p>HeaderFile</p>
<pre><code>//---------------------------------------------------------------------------

#ifndef thDownloadH
#define thDownloadH
//---------------------------------------------------------------------------
#include &lt;Classes.hpp&gt;
//---------------------------------------------------------------------------
class download : public TThread
{
private:
protected:
	void __fastcall Execute();
public:
	__fastcall download(bool CreateSuspended);
	int startDownload( AnsiString file, AnsiString to );
};
//---------------------------------------------------------------------------
#endif
</code></pre>
<p>CPP</p>
<pre><code>//---------------------------------------------------------------------------

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

#include &quot;thDownload.h&quot;
#include &quot;fmDownload.h&quot;
#include &lt;windows.h&gt;
#pragma package(smart_init)
//---------------------------------------------------------------------------

//   Important: Methods and properties of objects in VCL can only be
//   used in a method called using Synchronize, for example:
//
//      Synchronize(&amp;UpdateCaption);
//
//   where UpdateCaption could look like:
//
//      void __fastcall download::UpdateCaption()
//      {
//        Form1-&gt;Caption = &quot;Updated in a thread&quot;;
//      }
//---------------------------------------------------------------------------

__fastcall download::download(bool CreateSuspended)
	: TThread(CreateSuspended)
{
}
//---------------------------------------------------------------------------
void __fastcall download::Execute()
{
  // startDownload(); ?¿
}
//---------------------------------------------------------------------------
int download::startDownload( AnsiString file, AnsiString to )
{
	return CopyFile( file.c_str(), to.c_str(), true );
}
</code></pre>
<p>Externer Aufruf:</p>
<pre><code>download *dl;
   dl-&gt;startDownload( file, to );
</code></pre>
<p>Nur ich glaube keineswegs das dies der richtige Weg ist den Thread zu starten.<br />
Aber genauso wenig weiß ich wie sonst <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>
]]></description><link>https://www.c-plusplus.net/forum/topic/201786/frage-zu-threads</link><generator>RSS for Node</generator><lastBuildDate>Wed, 19 Aug 2026 03:26:00 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/201786.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 04 Jan 2008 01:35:50 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage zu Threads on Fri, 04 Jan 2008 01:35:50 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich bin gerade dabei ein Kopiervorgang zu starten und dann zu überwachen.</p>
<p>Dazu möchte ich den Vorgang über CopyFile(); auslagern in einen Thread.</p>
<p>Hab mich dort jetzt mal etwas durch &quot;geklickt&quot; und Frage mich gerade wie ich den<br />
Thread selber starte? Wenn ich extern ein Objekt des Threds anlege und dann so eine Funktion aufrufe wartet die Anwendung selber noch auf den Abschluß das scheint also nicht der richtige Weg zu sein <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="😉"
    /> Execute() selbst aber ist _protected und das sicherlich mit gutem Grund... Nun gelange ich aber ans Ende meines Wissens.</p>
<p>Der Code sieht zZ so aus:</p>
<p>HeaderFile</p>
<pre><code>//---------------------------------------------------------------------------

#ifndef thDownloadH
#define thDownloadH
//---------------------------------------------------------------------------
#include &lt;Classes.hpp&gt;
//---------------------------------------------------------------------------
class download : public TThread
{
private:
protected:
	void __fastcall Execute();
public:
	__fastcall download(bool CreateSuspended);
	int startDownload( AnsiString file, AnsiString to );
};
//---------------------------------------------------------------------------
#endif
</code></pre>
<p>CPP</p>
<pre><code>//---------------------------------------------------------------------------

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

#include &quot;thDownload.h&quot;
#include &quot;fmDownload.h&quot;
#include &lt;windows.h&gt;
#pragma package(smart_init)
//---------------------------------------------------------------------------

//   Important: Methods and properties of objects in VCL can only be
//   used in a method called using Synchronize, for example:
//
//      Synchronize(&amp;UpdateCaption);
//
//   where UpdateCaption could look like:
//
//      void __fastcall download::UpdateCaption()
//      {
//        Form1-&gt;Caption = &quot;Updated in a thread&quot;;
//      }
//---------------------------------------------------------------------------

__fastcall download::download(bool CreateSuspended)
	: TThread(CreateSuspended)
{
}
//---------------------------------------------------------------------------
void __fastcall download::Execute()
{
  // startDownload(); ?¿
}
//---------------------------------------------------------------------------
int download::startDownload( AnsiString file, AnsiString to )
{
	return CopyFile( file.c_str(), to.c_str(), true );
}
</code></pre>
<p>Externer Aufruf:</p>
<pre><code>download *dl;
   dl-&gt;startDownload( file, to );
</code></pre>
<p>Nur ich glaube keineswegs das dies der richtige Weg ist den Thread zu starten.<br />
Aber genauso wenig weiß ich wie sonst <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1430362</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1430362</guid><dc:creator><![CDATA[Slashi]]></dc:creator><pubDate>Fri, 04 Jan 2008 01:35:50 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Threads on Fri, 04 Jan 2008 14:08:42 GMT]]></title><description><![CDATA[<p>Du startest den Thread einfach über den Konstruktor bzw. anschließend mit Resume():</p>
<pre><code class="language-cpp">download *dl = new download(false);

// bzw.

download *dl = new download(true);
// ...
dl-&gt;Resume();
</code></pre>
<p>Den eigentlichen Code für den Thread mußt du in download::Execute() schreiben.</p>
<p>Aber dein Thread wartet natürlich auch, solange die Funktion &quot;CopyFile&quot; ausgeführt wird. Was willst du denn genau überwachen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1430624</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1430624</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Fri, 04 Jan 2008 14:08:42 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Threads on Fri, 04 Jan 2008 17:34:24 GMT]]></title><description><![CDATA[<p>Wieder ein Stück schlauer.</p>
<p>Natürlich wartet der Thread auch. Soll er ja auch. Nur die Anwendung selber läuft weiter.</p>
<p>Meine Absicht ist es nun über einen Timer die Größe der Ursprungsdatei mit der Zieldatei zu vergleichen und so einen Status zu bekommen bzw. einen Statusbalken zu füttern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1430728</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1430728</guid><dc:creator><![CDATA[Slashi]]></dc:creator><pubDate>Fri, 04 Jan 2008 17:34:24 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Threads on Fri, 04 Jan 2008 17:53:52 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Gute Idee (Anzeigen eines Kopierfortschritts) aber schlechte Umsetzung.<br />
Benutzt einfach <a href="http://msdn2.microsoft.com/en-us/library/aa363852.aspx" rel="nofollow">CopyFileEx</a>. Da kannst du eine Callback-Funktion angeben die dich automatisch über den Fortschritt ünterrichtet. Damit kannst du dir i.a. den ganzen Thread sparen.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1430736</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1430736</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Fri, 04 Jan 2008 17:53:52 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Threads on Fri, 04 Jan 2008 18:46:34 GMT]]></title><description><![CDATA[<p>Zumindest weiß ich nun wie ich einen Thread starte <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>Werde mir die Funktion mal anschauen, danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1430765</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1430765</guid><dc:creator><![CDATA[Slashi]]></dc:creator><pubDate>Fri, 04 Jan 2008 18:46:34 GMT</pubDate></item></channel></rss>