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

Thunder Storm

Treue Seele

  • »Thunder Storm« ist der Autor dieses Themas

Beiträge: 297

Wohnort: fragt einfach per pm nix da ;)

Beruf: Ausbildung (Technischer Assistent für Software Technologie)

  • Private Nachricht senden

1

07.06.2005, 13:34

funktionen gleichzeitig ablaufen lassen?

Hmm also ich bin seit einiger zeit auf der suche nach einer möglichkeit ein console programm 2 sachen gleichzeitig machen zu lassen. das könnte man bei animationen z.b. gut nutzen. ihr kennt doch z.b. sicher das beispiel mit dem / der durch drehung aussieht wie ein stern mit entsprechender geschwindigkeit. die zeichen dafür waren I,/,-,\ .... was ist jetzt wen ich diesen stern gleichzeitig 2, 3 oder noch öfter auf dem bildschirm ausgeben will? oder wen ich jetzt mit ascii 2 autos zeichne wo das eine nach links und das andere nach rechts fährt? wie kann man so etwas gleich zeitig realisieren??

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

2

07.06.2005, 15:22

Ja kann man. Also "gleichzeig" ist relativ :) außer wenn du 2 CPU hast!.
Man kann "gleichzeitig" aber imitieren. So "macht" der CPU erst den einen Teil und dann den anderen Teil der Funktion, wirst schon sehen was ich meine :)

Wo man wirklich so was braucht ist z.B. bei Netzwerkcode (SOCKETS) oder bei KI.

Man macht das ganze mit sogennaten Threads. Schau mal im FAQ nach, da müsste ein Thread von mir sein, bin mir aber nicht sicher. In der neuen Version von Davids Buch sind auch Threads drin.

Thunder Storm

Treue Seele

  • »Thunder Storm« ist der Autor dieses Themas

Beiträge: 297

Wohnort: fragt einfach per pm nix da ;)

Beruf: Ausbildung (Technischer Assistent für Software Technologie)

  • Private Nachricht senden

3

07.06.2005, 15:59

das gut das liegt heute in meinem briefkasten XD

DrthM2001

Alter Hase

Beiträge: 721

Wohnort: Karlsruhe

  • Private Nachricht senden

4

07.06.2005, 16:03

Threads sind echt coole sachen! Code:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// Create thread

    ThreadHandle = CreateThread(0, 0, ThreadFunktion, 0, 0, &ThreadID);

}

ExiThread()
{
    
    TerminateThread(ThreadHandle,ExitCode);

}

DWORD WINAPI ThreadFunktion(LPVOID pParameter)
{
    AllocConsole();
    ShowWindow(FindWindowA("ConsoleWindowClass",NULL),0);

    ... FUNKTIOENN

    return t;
}

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

5

07.06.2005, 21:50

man muss aber aufpassen. Wenn du z.B. in beie Treade ein printf("Thread1"); und ein printf("Thread2"); reinschreibst wird folges bei rauskommen:

ThThrreaatt12 oder so was ähnliches.

uch bei der manipulation von Variblen muss du aufpassen.

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

6

07.06.2005, 22:01

Critical Section
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

7

07.06.2005, 23:28

Jep Nox sagt das Stichwort schon. Mit denen Kannst du Sektionen sperren. Erst wenn du sie aufhabst haben andere Threads zugriff. google einfach mal

Anonymous

unregistriert

8

08.06.2005, 16:15

Hallo,

warum funktioniert des nicht?

Fehler:
- i wird nur einmal erhöht, dann kommt immer 10. Warum?
- Wie kann ich lpdwThreadID setzen? Da kommt immer ein Compilerfehler, wenn es was anderes als 0 ist.
- Bei ExitThread kommt ein Runtimerror


C-/C++-Quelltext

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
#include <windows.h>
#include <iostream>
#include <mmsystem.h>


int i = 0;


DWORD WINAPI ThreadProc( LPVOID lpParam )
{
    i+=10;

    return 0;
};


int main()
{
    LPDWORD lpdwThreadID = 0;
    HANDLE hThread = CreateThread( 0, 0, ThreadProc, 0, 0, lpdwThreadID );

    DWORD dwEndTime = timeGetTime() + 5000;
    while(timeGetTime()<dwEndTime)
    {
        std::cout << i << "\n";
        Sleep(500);
    }

    ExitThread(GetExitCodeThread(hThread, 0));

    return 0;
}

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

9

08.06.2005, 16:41

"The GetExitCodeThread function retrieves the termination status of the specified thread."

Du übergibst den Status als ID? Oo
Wir haben dir doch gesagt, dass du bei Var vorsichtig sein musst, außerdem ist doch klar wieso i+=10; 10 ergibt............
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

10

08.06.2005, 22:37

ja ich versteh dein Problem auch nicht. Wenn du i nicht nur einmal um 10 sondern mehrere Male erhöhren musst brauchst du Schleifen, das ist da auch der Fall und entspricht auch keineswegs dem Anwendungsbereiches eines Threads!

Werbeanzeige