Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

koschka

Community-Fossil

  • »koschka« ist der Autor dieses Themas

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

1

13.12.2003, 12:37

Einführung in die Thread Programmierung.

Hi,
kann mir das mal jemand logisch erklären in den Dokumentationen ist das etwas... naja erklärt!
Soweit ich aber weiss kann ich doch einen Thread nutzen, um "ein zweites Programm" neben dem eigentlichen nutzen zu können, was aber das Hauptprogramm manipluiert.

z.B. Der Benutzer soll irgendwas anderes machen, und mein neuer Thread verschiedene Bilder ihm anzeigen.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

13.12.2003, 16:24

Ja, man definiert eine Thread-Funktion. Dies ist praktisch die Main-Funktion des Threads. Alles, was darin abläuft, läuft parallel zum Programm. Übrigens werde ich in der zweiten Auflage von meinem Buch auch einen Abschnitt über Threads einbauen, bzw. ich habe es bereits getan.

koschka

Community-Fossil

  • »koschka« ist der Autor dieses Themas

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

3

13.12.2003, 19:27

Cool, wieder ein neuer Grund auch die zweite Auflage zu kaufen, kannst mir aber wenigstens mal ein Tipp geben... oder einen Link zu nem Tutorial

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

4

13.12.2003, 20:01

Klar, hier mal ein kleines Code-Beispiel:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <windows.h>

DWORD WINAPI ThreadFunktion(LPVOID pParameter)
{
    for(int i = 0; i < 5; i++)
    {
        MessageBox(0, "Ich bin ein Thread!", "Haha", MB_OK);
        Sleep(3000);
    }

    return 0;
}

int WINAPI WinMain(HINSTANCE i, HINSTANCE j, char* k, int l)
{
    // Thread erstellen
    DWORD ThreadID;
    HANDLE Thread = CreateThread(0, 0, ThreadFunktion, 0, 0, &ThreadID);

    // Der Thread läuft jetzt. Wir geben ihm 5 Sekunden.
    Sleep(5000);

    // Den Thread anhalten!
    SuspendThread(Thread);
    MessageBox(0, "OK klicken, um Thread weiterlaufen zu lassen!", "Info", MB_OK);

    // Und weiter!
    ResumeThread(Thread);

    // Warten, bis der Thread beendet ist
    DWORD ThreadStatus;
    do {
        GetExitCodeThread(Thread, &ThreadStatus);
    } while(ThreadStatus == STILL_ACTIVE);

    return 0;
}

koschka

Community-Fossil

  • »koschka« ist der Autor dieses Themas

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

5

13.12.2003, 20:07

vielen Dank, mach weiter so :) :huhu:

6

14.12.2003, 00:35

Bleibt noch die Frage wozu ein Thread gut ist? Bringt es z.B. Performance Vorteile wenn man alles Rendering in einem Render-Thread erledigt (hab ich schon öfters gehoert)? Wie kann man die Dinger denn design-technisch clever einsetzen? Wäre nett wenn man da noch ein paar Infos bekommen könnte ^^ !

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

7

14.12.2003, 00:45

Prozessoren mit Hyper-Threading (Intel Pentium 4) oder Systeme mit mehreren echten Prozessoren profitieren besonders stark davon. Dann können die Threads auf separaten Prozessoren laufen, und damit wirklich gleichzeitig.
In der 2. Auflage werden Threads für eine kleine Skriptsprache verwendet. Das Skript läuft im Hintergrund, in einem separaten Thread. Normalerweise lässt man auch Netzwerk- und Eingaberoutinen in einem Thread laufen. Das hat vor allem einen Vorteil: wenn die Grafik zum Rendern mal ein bisschen länger braucht, läuft das Spiel im Hintergrund trotzdem "flüssig" weiter.
Man muss aber aufpassen, dass sich zwei Threads nicht gegenseitig in die Quere kommen. Man muss sich jederzeit darauf einstellen, dass die Verarbeitung vom Betriebssystem abgebrochen wird, damit der nächste Thread seine Arbeit erledigen kann (sie laufen ja nicht wirklich gleichzeitig, sondern immer nur einer nach dem anderen, in sehr kurzen Intervallen). Wenn dann zwei Threads dieselben Variablen benutzen und diese auch verändern, ist Vorsicht geraten. Aber dazu bietet Windows sogenannte "Critical Sections".

8

14.12.2003, 00:53

Danke für die Antwort! Das mit der Script-Sprache interessiert mich besonders, wird aber noch ewig dauern bis ich an den Einsatz einer solchen Wunderwaffe ;) denken kann :(

Beiträge: 58

Wohnort: Olpe

Beruf: Schüler

  • Private Nachricht senden

9

14.12.2003, 13:03

Dieses in die Quere kommen kann man gut dadurch merken, wenn man zwei Threads macht und diese Ausgaben mit cout machen lässt.

Es war bei mir mal so:

Quellcode

1
2
3
4
5
6
7
8
9
int thread1()
{
std::cout << "Hallo";
}

int thread2()
{
std::cout << "Mensch";
}


Ausgabe:
HalMenllosch

Oder so ^^
Wenn du denkst es geht dir gut
denkst es könnt nicht besser sein
dann geht's ab ins tiefe Tal
und dein Leben ist die Qual

10

14.12.2003, 16:53

Zitat von »"Mis2com Brillenschlange"«

Dieses in die Quere kommen kann man gut dadurch merken, wenn man zwei Threads macht und diese Ausgaben mit cout machen lässt.

Es war bei mir mal so:

Quellcode

1
2
3
4
5
6
7
8
9
int thread1()
{
std::cout << "Hallo";
}

int thread2()
{
std::cout << "Mensch";
}


Ausgabe:
HalMenllosch

Oder so ^^


dafür gibt es in der WinAPI sogenannte Mutexe("Kritische Bereiche")
Die sind für die Threadsynchronisation ziemlich wichtig
In der MSDN ist ein ganzer Themenkomplex zur Threadsynchronisation gewidmet
ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.1031/dllproc/base/synchronization.htm
Do, ut des!
Ceterum censeo, carthaginem delendam esse

Werbeanzeige