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

GMoney597

Frischling

  • »GMoney597« ist der Autor dieses Themas

Beiträge: 48

Wohnort: Roth

Beruf: Verwaltungsfachangesteller (Stadtverwaltung), Fitness-Trainer und Muay-Thai-Trainer

  • Private Nachricht senden

1

20.10.2014, 13:29

im Hintergrund zählen

ich habe hier im Forum das Thema aus Zufall schon mal gefunden aber jetzt irgendwie nicht mehr

ich möchte, aus einem klitzekleinen Konsolenprogramm im Hintergrund einen Zähler laufen lassen, der einen von mir festgelegten Wert,
nach einem festgelegten Muster verändert - laufend.

Wenn ich beispielsweise ein Börsenspiel daraus machen würde, so könnte der Spieler kaufen oder verkaufen und dazu muss der aktuelle Wert
dann aus der "Hintergrund-Schleife" abgefragt werden und dann in die Rechnung mit einbezogen werden.

Aber mein Problem ist, dass der Zähler beim Programmaufruf anläuft aber das restliche Programm läuft nicht weiter.

Jetzt habe ich aufgeschnappt, das läge wohl an der Konsolenanwendung an sich, weil diese nicht für Multitasking ausgelegt ist.

Mein Programmcode ist anbei:
(ich weiß, dass meine Variablen, deutsche und englische Namen haben, Groß- und Kleinschreibung verwendet wird)

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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#include <iostream>
#include <ctime>
#include <cstdlib>

using namespace std;

void pause(int);
float sequence();

int main()
{
    float price;
    price = sequence();

    float portfolio = 0;
    int shares, amount, choice;
    
    do
    {
    
        cout << "Was moechtest Du tun?" << endl;
        cout << "1 - Kaufen" << endl;
        cout << "2 - Verkaufen" << endl;
        cout << "3 - Beenden" << endl;
        cout << "Auswahl: ";
    
        cin >> choice;
    
        switch(choice)
        {
            case 1:
            {
                cout << price;
                cout << "Wieviel moechtest Du kaufen? :";
                cin >> amount;
            
                portfolio =  portfolio + (amount * price);
                cout << "Dein Portfolio hat einen Wert von --> " << portfolio << " und du haeltst aktuell --> " << shares << " Aktien" << endl;
            }
            case 2:
            {
                cout << price;
                cout << "Wieviel moechtest Du kaufen? :";
                cin >> amount;
            
                portfolio =  portfolio - (amount * price);
                cout << "Dein Portfolio hat einen Wert von --> " << portfolio << " und du haeltst aktuell --> " << shares << " Aktien" << endl;
            }
            case 3:
            {
                cout << "Es wird beendet" << endl;
            }
        }
    }while (!3);

    
    system("Pause");
    return 0;
}

void pause(int seconds)
{
    clock_t temp;                                   //initialisierung der Zeitvariablen 'temp' zur temporären Speicherung der Zeit
    temp = clock() + (seconds * CLOCKS_PER_SEC);    //temp wird der Wert von clock + (Sekunden * CLOCKS_PER_SECOND) zugewiesen
    while (clock() < temp);                         //und solange clock < temp ist, läuft die Schleife (hier leer)
    {}
}

float sequence()
{
    float price = 123.45;
    float temp;
    srand (static_cast <unsigned int> (time(0)));
    int change, range;

    
    for (;;)
    {
        pause(3);
        change = rand() % 2;
        range = rand() % 9 + 1;
        if (change == 0)
        {
            temp = price * ((double)range / 100);
            price = price + temp; 
        }
        else
        {
            temp = price * ((double)range / 100);
            price = price - temp;
        }
    }

}

Legend

Alter Hase

Beiträge: 731

Beruf: Softwareentwickler

  • Private Nachricht senden

2

20.10.2014, 13:33

In diesem Fall könntest du vielleicht auch deine Sequence-Methode so umschreiben das sie einen Zeitintervall zwischen zwei Aufrufen als Parameter nimmt. Und dieses benutzt um ausgehend vom letzten Ergebnis zu dem aktuellen Ergebnis weiterzurechnen.
"Wir müssen uns auf unsere Kernkompetenzen konzentrieren!" - "Juhu, wir machen eine Farm auf!"

Netzwerkbibliothek von mir, C#, LGPL: https://sourceforge.net/projects/statetransmitt/

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

3

20.10.2014, 14:22

Du brauchst kein Multitasking. Du kannst immer abwechselnd, Tasten ueberpruefen und berechnen. Dazu brauchst du nur irgendeine Bibliothek nutzen, die sowas kann. Z.B. das Windows SDK: http://msdn.microsoft.com/en-us/library/…3(v=vs.85).aspx

GMoney597

Frischling

  • »GMoney597« ist der Autor dieses Themas

Beiträge: 48

Wohnort: Roth

Beruf: Verwaltungsfachangesteller (Stadtverwaltung), Fitness-Trainer und Muay-Thai-Trainer

  • Private Nachricht senden

4

21.10.2014, 16:29

leider fehlt mir bisher das KnowHow, die vorgeschlagenen Funktionen zu benutzen.

Ist es nicht so, dass die Zeit ohnehin mitläuft, kann ich nicht einen Zeitstempel zu Beginn des Programmes setzen
und immer wenn bspw. 10 Sekunden vergangen sind, laufende Abfrage der Systemzeit, dann ändert sich der Wert?

Ich kann leider noch keine Windows-Programmierung und dachte, vielleicht ließe sich das trotzdem irgendwie auf
der Konsole regeln

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

5

21.10.2014, 16:37

Nein, C++ selbst bietet dafuer keine Funktionalitaet an.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

6

21.10.2014, 19:59

leider fehlt mir bisher das KnowHow, die vorgeschlagenen Funktionen zu benutzen.

Was braucht man denn dafür an "Know how"?
Einfacher geht's doch gar nicht. Du sagst der Funktion, an welcher Taste du interessiert bist, und sie sagt dir, ob sie gedrückt ist oder nicht.

Werbeanzeige