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

Toa

Alter Hase

  • »Toa« ist der Autor dieses Themas

Beiträge: 944

Beruf: Research associate

  • Private Nachricht senden

11

02.08.2007, 15:11

WIe ruf ich den Thread denn auf ohne das es in ihm hängen bleibt und das rpg weiter läuft

Black-Panther

Alter Hase

Beiträge: 1 443

Wohnort: Innsbruck

  • Private Nachricht senden

12

02.08.2007, 15:26

lol? Das ist ja der SINN von Threads... Dass dann zwei Sachen parallel laufen können! Das einzige was passiert, ist, dass der Thread dir etwas von der CPU-Zeit vom Hauptthread wegnimmt... Aber bei einem Consolenspiel sollte das nicht das Problem sein. Und vor allem, wenn du den Thread in Sleep schickst, verbraucht er 0-CPU-Zeit... deswegn... np
stillalive studios
Drone Swarm (32.000 Dronen gleichzeitig steuern!)
facebook, twitter

rewb0rn

Supermoderator

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

13

02.08.2007, 15:39

es ist auch ganz leicht ohne threads realisierbar. du willst doch einfach, dass in deinem spiel nach soundso viel zeit was bestimmtes passiert? und wahrscheinlich hast du auch eine hauptschleife? also einfach jeden frame aufrufen:

C-/C++-Quelltext

1
2
3
4
if (EreignisZeit <= 0)
    EreignisAufrufen();
else
    EreignisZeit -= ZeitSeitLetztemFrame;

Toa

Alter Hase

  • »Toa« ist der Autor dieses Themas

Beiträge: 944

Beruf: Research associate

  • Private Nachricht senden

14

02.08.2007, 16:04

ALso ich hab das ganze so ist das richtig ?

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include "stdio.h"
static bool pM = true; long timer_id[]= {0,0,0,0};


void thr (void*prm) {cout <<"Wird alle 18 sec aufgerufen",
   TIM_ictr(),(long)prm);}

int  main (int argc, char*argv[])
{
  HANDLE flg_han; unsigned long sts;
    

  TIM_make_tmrT(18000,&timer_id[3],thr,(void*)789,true);

  flg_han = TIM_get_handle(timer_id[0]);

cout << "hier gehts weiter";
}


EDIT : ACH das klappt alles einfach nicht wie ich es will ich verzeifel hier noch :/

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

15

02.08.2007, 16:26

Ich glaub dir fehlt grad nen Ansatz... zum Glück haben wir nen kleines Tutorial zu Multithreating im Forum :D

https://www.spieleprogrammierer.de/phpBB2/viewtopic.php?t=6661

Toa

Alter Hase

  • »Toa« ist der Autor dieses Themas

Beiträge: 944

Beruf: Research associate

  • Private Nachricht senden

16

02.08.2007, 16:34

Puhh danke , war irgendwie voll am durchdrehen weil nichts mehr geklappt hat , werde mich mit dem ganzen ma beschäftigen ...

*heul* irgdnwie wird der thread nicht aufgerufen

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
DWORD WINAPI ThreadProc(LPVOID lpParam)
{
    int i;

    printf("Ich bin ein Thread und werde mich in 5 Sekunden von selbst beenden\n");
 system("pause");
    for(i=20; i>0; --i)
    {
        printf("Noch %d Sekunden\n", i);
        Sleep(1000);
    }

    printf("Und Tschuess\n");
     system("pause");
}


C-/C++-Quelltext

1
2
3
4
5
6
7
DWORD    threadId;
 HANDLE    threadHandle;

   printf("Ich bin das Hauptprogramm\n");
   system("pause");

    threadHandle = CreateThread(NULL, 0, ThreadProc, NULL, CREATE_SUSPENDED, &threadId);


Das ich bin das haupprogramm wird ausgegeben aber das im Thread alles nicht :/

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

17

02.08.2007, 17:29

schaut euch doch nochmal rewb0rn ansatz an ;)
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.

Toa

Alter Hase

  • »Toa« ist der Autor dieses Themas

Beiträge: 944

Beruf: Research associate

  • Private Nachricht senden

18

02.08.2007, 18:40

Zitat von »"Nox"«

schaut euch doch nochmal rewb0rn ansatz an ;)


Das problem ist das es keine haupschleife in den abschnitt des spieles gibt da ist nur text und dann soll eine variable für 10 min erhöht werden und danach wieder gesenkt werden aber das ganze soll nicht den programm Fluss beeinträchtigen das game soll weiter laufen ohne schleife

19

03.08.2007, 15:37

Du solltest den Thread nicht mit CREATE_SUSPENDED starten. Dann ist er nämlich gleich nach dem Start pausiert und kann natürlich auch nichts machen.
Tutorials zu OpenGL, Ubuntu und Programmieren allgemein: www.tomprogs.at

Forum und Wiki zum Programmieren lernen: proggen.org/forum.proggen.org

Toa

Alter Hase

  • »Toa« ist der Autor dieses Themas

Beiträge: 944

Beruf: Research associate

  • Private Nachricht senden

20

03.08.2007, 17:46

Thx =)

Also ich mach das ganze nun so und das klappt auch :

C-/C++-Quelltext

1
2
3
4
5
6
7
//main

DWORD    threadId;
HANDLE    threadHandle;



threadHandle =CreateThread(NULL, 0,  ThreadProc, NULL, 0, &threadId);


und hier der thread

C-/C++-Quelltext

1
2
3
4
5
6
DWORD WINAPI ThreadProc(LPVOID lpParam)
{
  //Sleep(60000);

  Sleep(40000);

}


jetzt noch eine kleine Frage wie kann ich dem Thread diesen Zeiger Übergeben sPlayer *wPlayer ?

Also eigentlich müsste man den Thread doch dann so aufrufen :

C-/C++-Quelltext

1
threadHandle =CreateThread(NULL, 0,  ThreadProc, wPlayer, 0, &threadId);


aber was muss in die signatur von DWORD WINAPI ThreadProc(LPVOID lpParam) )

weil DWORD WINAPI kann man ja nur einen Void Pointer übergeben :(
wie mach ich das denn nun ??

Werbeanzeige