C++ Hintergrundprozess

...komplette Frage anzeigen

2 Antworten

Windows bzw. die WinAPI bietet hier Timerfunktionen, welche du nutzen könntest. Eine unsaubere Alternative wäre natürlich das Ganze in einer Schleife hochzuzählen und die Tastendrücke weiterhin via kbhit() zu empfangen.

Führen viele Wege nach Rom, ich würde mir an deiner Stelle mal die Timerfunktion anschaun, auch wenn die WinAPI mit ihrer Syntax und dem Aufbau etwas gewöhnungsbedürftig ist, sofern man noch nicht damit gearbeitet hat.

Soferns sich jedoch nur um was Ganz kleines handelt wie TicTacToe oder Vier gewinnt wäre eine Methode wie gesagt das Ganze in eine Schleife zu packen so ala

int timer = TIME(NULL);
while(true) {
    if(TIME(NULL) - timer == 20) {
        zahl += 20;
        timer = TIME(NULL);
    }
    if(kbhit()) {
        // Hier werden Tastenanschläge wahrgenommen.
    }
}

Wäre wie gesagt eine ziemliche quick and dirty Lösung aber für manchen kleinkram mag sowas reichen.

Sutzio2 24.08.2012, 00:43

Hey Vielen Dank für deine Antwort nur ist das auch nicht ganz das was ich meine. Also mal zu meinem Spiel ich möchte ein "Rohstofflager" programmieren dort werden Holz,Lehm,Eisen und Getreidevorräte angezeigt z.B. von jedem 100 und nun möchte ich das es diese 100 z.B. jede 10 Sekunden um +20 erhöht aber ich trotzdem noch andere sachen in meinem Spiel machen kann wie z.B. Gebäude ausbauen ect ist sowas möglich ?

0
apachy 24.08.2012, 00:52
@Sutzio2

Wie gesagt, sofern das Ganze komplexer ist nimmt du die Timerfunktionen der WinAPI. Ansonsten ist das mit dieser Lösung ebenfalls Möglich. Tastenschläge werden innerhalb der If-Verzweigung registriert und von dort kannst du quasi alles ausführen was du magst.

Natürlich ist die Lösung sehr unschön aber es kommt eben auf die Größe deines Programms an bzw. was alles gemacht werden soll. Schau mal in Google nach WM_Timer, so müsste die Funktion der WinAPI heißen. MSDN hat dazu sicher einige Seiten.

0
Sutzio2 24.08.2012, 01:02
@Sutzio2

Ehm eine Frage hätte ich noch. Kann man den WM_Timer unabhängig zum Hauptprogramm laufen lassen also sodass ich im Hauptprogramm normal spielen kann während er für sich selber schön hochzählt und die Zahl dann an das Hauptprogramm schickt ?

0
IQ155 24.08.2012, 15:59
@Sutzio2

Solange du eine while/for Schleife drin hast und die Bedingung erfüllt ist ,geht's dann. Welche API verwendest du für das Spiel oder wird es Textbasiertes Konsolenspiel ?

0

Ich würde dir raten, keinen Timer sondern einen Thread zu benutzten:

#include <windows.h> // Fuer "Sleep"
#include <process.h> // Fuer "_beginthread"
#include <iostream>

using namespace std;

void _thread_func(void * ptr)
{
    // "ptr" ist eine Referenz (Pointer) auf "Wehrt"
    int* Wehrt_referenz = (int*)ptr;

    cout << "Ein neuer Thread wurde gestartet" << endl;

    while(*Wehrt_referenz < 200)
    {
        Sleep(20000); //Wartet 20s
        (*Wehrt_referenz) += 20; // Erhoeht "Wehrt" um 20
    }
}

int main()
{
    int Wehrt = 0;

    //Die Funktion "_thread_func" wird im seperaten Thread ausgefuehret
     //und "Wehrt" als Referenz uebergeben
    _beginthread(_thread_func, 0, &Wehrt);

    while( Wehrt < 200)
    {
        cout << "Aktueller Wehrt : " << Wehrt << endl;
        Sleep(1000); // Wartet 1s
    }

    return 0;
}

(Code ist getestet und funktioniert mit VC++ 2010)

Was möchtest Du wissen?