Zum Inhalt springen

Ein Thread für einen Anfänger


Filou

Empfohlene Beiträge

Wobei wir dann (wieder einmal) bei der Diskussion "vernünftige Fragestellung" wären...

"verständlich und in deutsch beibringen"

...wurde bisher nur mit anderssprachigen Mitmenschen darüber geredet...?!

"wie ich einen Thread programmiere?Der dann später mal Dateien kopieren, ohne

dass das ganze system stehen bleibt"

...das könnte man noch präzisieren oder? Welches System bleibt stehen und was genau ist damit gemeint?

Irgendwie höre ich vertraute Stimmen...

Außerdem sind die ersten hits, die google bei der Suche von perdi bringt gar nicht mal soo übel !!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Perdi, es wäre nett, wenn du nicht ständig nur google-Links setzt.
Es wäre genauso nett, wenn so manch ein Fragesteller verständlich zum Ausdruck bringt, was er denn überhaupt möchte (siehe auch Posting von JohnJagger).

Es geht in keinster Weise aus dem Urpsrungsposting hervor, wieviel Ahnung überhaupt von Programmierung beim Fragesteller vorhanden ist - was heisst also "Thread programmieren" in diesem Zusammenhang?

Ich kann mich durchaus irren, aber die Formulierung "für einen Anfänger verständlich und in deutsch beibringen" weckt bei mir sehr stark die Assoziation zu "ich habe nicht wirklich Ahnung und auch nicht wirklich Lust dazu, mir neues Wissen anzueignen, wenn es länger als 10 Minuten dauert".

Aber davon ganz abgesehen: Was spricht dagegen einen Google-Link zu posten, wenn die Such-Resultate sowas von offensichtlich weiterhelfen, dass der Fragesteller sie auch mit praktisch keiner Mühe selber gefunden hätte? Es steht dir wiederrum frei, diesen Link einfach zu ignorieren.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Vorschlag: lasst uns nicht schon wieder in diese Diskussion verfallen!

Warten wir ab was Filou meint...vielleicht haben die google-Ergebnisse

ja weitergeholfen, ansonsten bekommen wir bestimmt eine Präzisierung

der Fragestellung und etwas mehr persönlichen Programmier-Background.

*mitdemzaunpfahlwink*

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wobei wir dann (wieder einmal) bei der Diskussion "vernünftige Fragestellung" wären...

"verständlich und in deutsch beibringen"

...wurde bisher nur mit anderssprachigen Mitmenschen darüber geredet...?!

"wie ich einen Thread programmiere?Der dann später mal Dateien kopieren, ohne

dass das ganze system stehen bleibt"

...das könnte man noch präzisieren oder? Welches System bleibt stehen und was genau ist damit gemeint?

Irgendwie höre ich vertraute Stimmen...

Außerdem sind die ersten hits, die google bei der Suche von perdi bringt gar nicht mal soo übel !!

Also ich habe bisher nur englische Hilfe in Forum gefunden.

Und die meisten Leute haben nix erklärt nur irgendeinen Code gepostet der nicht funktioniert, wenn ichs in mein programm kopiere.

Ich habe eine Funktion geschrieben, die Dateien von A nach B kopiert.

Und eine schöne Bildlaufleiste als Animation gemacht, die Zeigt, dass der PC noch am schaffen ist.

Und diese Leiste bleibt sehen, wenn ich kopiere, weil das System ausgelastet ist.

Also wollte ich das kopieren in einem eigenen Thread machen....

Und ich fände es schön, wenn man mir auch ein bissel was dazu erklären könnte.

Das hier hab ich z.B. bekommen:

	DWORD dwThreadId;

	HANDLE hThread;


	hThread = CreateThread(

	  NULL,                        // default security attributes

      0,                           // use default stack size

      ThreadFunc,                  // thread function

      NULL,                        // argument to thread function

      0,                           // use default creation flags

      &dwThreadId);                // returns the thread identifier

Kann damit nix anfangen.

Wie bekomme ich da meine Kopieren Funkion rein?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Kann damit nix anfangen.

Wie bekomme ich da meine Kopieren Funkion rein?

ThreadFunc ist der Zeiger auf die Eintrittsfunktion (Adresse) des Threads. Dort beginnt die Ausführung Deines Threads. Die Funktion muss so aussehen:

DWORD WINAPI ThreadFunc(LPVOID parameter);

Mehr findest Du in der MSDN unter "CreateThread" und "ThreadProc". Dort ist auch ein Link zu einem Beispiel.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Und die meisten Leute haben nix erklärt nur irgendeinen Code gepostet der nicht funktioniert, wenn ichs in mein programm kopiere.
Naja du wirst generell bei Beispiel-Code, der gepostet wird immer Anpassungen vornehmen müssen, damit er in deinem speziellen Fall funktioniert.

Und diese Leiste bleibt sehen, wenn ich kopiere, weil das System ausgelastet ist. Also wollte ich das kopieren in einem eigenen Thread machen....
Wenn das System ausgelastet ist, wird dir auch ein neuer Thread nichts mehr bringen, der würde dann ja auch nicht zur Ausführung kommen.

Was wohl eher der Fall sein dürfte ist, dass du die Berechnung im EvenDispatcher Thread abarbeitest. Das heisst in dem Thread, der das Zeichnen auf dem Bildschirm übernimmt. Dadurch blockierst du dann mit deiner Copy-Operation das Zeichnen des Fensters (oder eines Controls) und es wird erst wieder gezeichnet, wenn du mit dem Kopieren fertig bist.

Aber ein eigener Thread ist trotzdem die Lösung des Problems.

Und ich fände es schön, wenn man mir auch ein bissel was dazu erklären könnte.
Was ist dir denn genau noch unklar? Du musst über ThreadFunc einen Pointer auf die Funktion übergeben, die von dem neuen Thread aufgerufen werden soll, und die dann die Arbeit erledigt.
Link zu diesem Kommentar
Auf anderen Seiten teilen

Sorry, Ich kapiere es immer noch nicht. :( *schäm*

hThread = CreateThread(NULL,0,ThreadFunc,NULL,0,&dwThreadId);

Was ist dann die ThreadFunc und für was brauche ich die ThreadId?

Könnt ihr mal von vorne anfangen zu erklären?

Stellt euch vor, ihr erklärt es euerer Mutter :)

Ich hab ungefähr genausoviel Ahnung!

Und selbst wenn ich das dann habe, was da oben steht, wie starte ich dann eine Funktion in dem Therad? mit ThreadId->kopieren(); oder so????

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich hab ungefähr genausoviel Ahnung!
Dann solltest du dich zunächst mal mit den Grundlagen von C(++) beschäftigen. Wenn du nicht weisst, was ein Funktionszeiger ist bringt es auch nichts an Threads gehen zu wollen. Und das Thema ist mal nicht eben in einem Posting hier erklärt - da brauchst du schon eine Weile um dich da einzulesen. Am besten schnappst du dir ein gutes C-Tutorial und fängst da an zu stöbern, wahrscheinlich gibt's dann da auch ein Kapitel über Threads drin.
Link zu diesem Kommentar
Auf anderen Seiten teilen

also ich habe schon viele c++ anwendungen gemacht

meistens mfc. auch größere sachen an denen ich mal ein halbes jahr gesessen habe. hab mir alles selber beigebracht. nur um zeiger habe ich mich immer gedrückt. das wollte nie in mein kopf.

wenn ich mal einen gebraucht hätte, habe ich es meistens mit globalen variablen oder so umgangen.

aber das mit den thread wüsste ich schon echt gerne....

Link zu diesem Kommentar
Auf anderen Seiten teilen

Für CreateThread brauchst Du keine C++ Kentnisse, reines C genügt.

Beispiel einer Funktion:


void SagHallo()

{

   printf("Hallo!\n");

}

Du Rufst die Funktion mit SagHallo(); auf. Andererseits ist SagHallo auch eine Variable, die einen Zeiger auf die Startadresse Der Funktion SagHallo im Speicher enthält. Du kannst Diesen Zeiger dann als Parameter an eine Andere Funktion übergeben und sie so die übergebene Funktion aufrufen lassen. Ein Beispiel für die Übergabe von Funktionszeigern ist qsort aus der C-Library. Genauso machst Du das mit Deinen Threads. Zuerst schriebst Du die Thread-Funktion, die das enthält, was Dein Thread ausführen soll. Beispiel:

#include <windows.h>

#include <stdio.h>


DWORD WINAPI MyThreadSagWasAndauernd(LPVOID parameter)

{

   // parameter wird in diesem Beispiel nicht genutzt

   while(true)

   {

      printf("was...\n");

      Sleep(1000);

   }

}

(Achtung: Im Beispiel ist eine Endlosschleife, in der Praxis solltest Du Dir etwas überlegen, wie Du den Thread sauber beenden kannst!) Nun kommt das Hauptprogramm. Es startet einen neuen Thread und arbeitet dannach selbstständig weiter:

int main()

{

   // Starte einen Thread:

   CreateThread(NULL, 0, MyThreadSagWasAndauernd, NULL, 0, NULL);

   // Kurz warten...

   Sleep(500);

   // Und noch eine Endlosschleife:

   while(true)

   {

      printf("anderes...\n");

      Sleep(1000);

   }

}

Ausgabe des Beispiels ist:

was...

anders...

was...

anders...

...usw....

Probier das Beispiel aus, es funktioniert.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...