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

1

02.08.2007, 03:31

Funktion nach 10 minuten aufrufen ohne schleife usw

Hey ho ,

also ich wollte mal fragen wie ich es anstellen kann einen Timer zu stellen der eine funktion nach genau nach 10 min ( zb) aufruft aber das ganze nicht in einer schleife fest hängt der programm fluss soll nicht behindert werden
und das ganze soll am besten ohne threads gelöst werden...


MFg Toa

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

2

02.08.2007, 03:44

Sag mal, wo soll eigentlich nach 10 min. der Startimpuls herkommen, wenn davor möglichst _garnichts_ los ist?

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

3

02.08.2007, 08:57

Du willste keine Schleife, du willst keine Threads, du willst keinen Timer... Ist doch ganz einfach:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>

void foo()
{
    std::cout << "Hallo Welt" << std::endl;
}

int main()
{
    std::cin.get();
    foo();
}


Eine simple und hochfunktionsfähige Lösung zu einem, wie ich meine, extrem komplexen Problem!
Das Prinzip ist ganz Idiotensicher! Einfach nach 10 Minuten auf die Return Taste hauen!
@D13_Dreinig

ChrisJ

Alter Hase

Beiträge: 487

Wohnort: Schweich

Beruf: Schüler

  • Private Nachricht senden

4

02.08.2007, 10:41

Zitat von »"David_pb"«

Du willste keine Schleife, du willst keine Threads, du willst keinen Timer...

Zitat von »"Toa"«

... wie ich es anstellen kann einen Timer zu stellen ...


SetTimer() und WM_TIMER nachschlagen
"Don't trust your eyes: They are a hell of a lot smarter than you are"

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

5

02.08.2007, 10:57

Oh, verlesen! :) Aber der Timer läuft trotzdem in einem anderen Thread! ;-P
@D13_Dreinig

Toa

Alter Hase

  • »Toa« ist der Autor dieses Themas

Beiträge: 944

Beruf: Research associate

  • Private Nachricht senden

6

02.08.2007, 14:05

Das mit dem Timer hab ich mal nachgeschlagen und überlegt es mit einer Callbackfunktion zu machen ist das so richtig ? Weil klappen tut das nicht :

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <Windows.h>
#include <stdio.h> 

void CALLBACK MyTimerProc(
    HWND hwnd,        // handle to window for timer messages

    UINT message,     // WM_TIMER message

    UINT idTimer,     // timer identifier

    DWORD dwTime)     // current system time

{
   // Ausführung  ( add / delete bonus health)

   
} 

int main()
{
    UINT_PTR ptr= SetTimer(NULL,NULL,1000,&(TIMERPROC)MyTimerProc);

       
    return 0;
}.


und würde main dann ganz normal weiterlaufen also stoppt der aufruf von setTimer auch nicht den ProgrammFluss ? ..

Mit Tastendruck kann ich es nicht machen es soll automatisch sein.
In der FUnktion soll dann ein Wert einer Variable für 10 min um einen Bestimmten Wert hochgesetzt werden und nach 10 wieder runter.[/cpp]

ChrisJ

Alter Hase

Beiträge: 487

Wohnort: Schweich

Beruf: Schüler

  • Private Nachricht senden

7

02.08.2007, 14:07

die WM_TIMER funktion muss in der fensterprozedur behandelt werden, und das geht leider nicht in einer konsolenanwendung.
du musst ein win32 programm erstellen.
"Don't trust your eyes: They are a hell of a lot smarter than you are"

Toa

Alter Hase

  • »Toa« ist der Autor dieses Themas

Beiträge: 944

Beruf: Research associate

  • Private Nachricht senden

8

02.08.2007, 14:18

Schade , muss Konsole sein .. ist nämlich für ein kleines rpg Consolen Game :/ .. haste ne andere Idee wie ich es schaffen kann ?

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

9

02.08.2007, 14:45

klar... aber nicht ohne Threads

Du startest einen neuen Thread, in dem erstellst du Variablen, mit denen du die Zeit misst (timeGetTime sollte in diesem Fall reichen).
In (pseudo)code könnte das ungefähr so aussehen:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int timer(/*nötige Threadparameter*/)
{
  unsigned long time=0, lasttime=timeGetTime();
  while (time<600000) // 600000 ms == 10min

  {
    Sleep(10); // beispielwert

  }
  // Zeit is um, tu was

}



int main()
{
  // Thread erstellen (timer)

  // dein RPG laufen lassen

  return 0;
};

Black-Panther

Alter Hase

Beiträge: 1 443

Wohnort: Innsbruck

  • Private Nachricht senden

10

02.08.2007, 15:04

Warum nicht einfach in einem Thread so: ?

C-/C++-Quelltext

1
2
3
4
5
ThreadMain(...)
{
    Sleep(60000);
    //Zeit ist um

}
stillalive studios
Drone Swarm (32.000 Dronen gleichzeitig steuern!)
facebook, twitter

Werbeanzeige