Programm unterbrechen?



  • Hallo! Ic 😕 h arbeite momentan mit "C" und "C++" So!
    Also ich hab ne frage zu "C"!!! Wie kann ich ein Programm für ein paar sekunden unterbrechen.

    sowas wie: sleep(1000);

    Geht das? Wenn ja wie sieht so was aus, und welche include Dateien muss ich haben? Wäre sehr nett wenn ihr mir helfen könntet.

    MFG: DerLateinProfi



  • Unter ANSI-C ist das meines erachtens nicht möglich. Du könntest dir natürlich eine Schleife basteln, die lange zählen muss. Wobei das sicher nicht sehr elegant ist 😉
    Du könntest die <dos.h> einbinden und die Funktion delay() nutzen.
    Unter Windows kannst du dir sowas zurechtbauen:

    void warte(double sec)
    {
        const DWORD dwWait = GetTickCount();
        while(GetTickCount()-dwWait < sec*1000); 
    }
    


  • Also das hab ich verstanden, nur wie sieht das dann in nem Programm aus?

    z.B:

    #include<stdio.h>;

    main();
    {
    printf("Hallo!!!");
    printf("\nDieses Programm schließt in 5 sekunden");

    //So hier soll das Programm jetzt eine Sekunde warten!

    printf("4");

    //So hier soll das Programm jetzt eine Sekunde warten!

    printf("3");

    //So hier soll das Programm jetzt eine Sekunde warten!

    printf("2");

    //So hier soll das Programm jetzt eine Sekunde warten!

    printf("1");

    exit();

    }

    Wie sieht das Programm denn dann aus? Kann mir das mal jemand schreiben?
    Wäre sehr nett!

    MFG:DerLateinProfi



  • Matthias S schrieb:

    void warte(double sec)
    {
        const DWORD dwWait = GetTickCount();
        while(GetTickCount()-dwWait < sec*1000); 
    }
    

    Warum einfach, wenns auch umständlich geht 🤡

    #include <windows.h>
    ...
    Sleep (1000);
    


  • Also das mit Windows.h kenn ich!
    Aber wenn ich die datei include, muss ich alle dazu gehörigen dateien haben. Das ist ja kein Problem, die hab cih ja!^^ Aber mein Compiler Miracle-C sagt dann das da ein Problem mit Windows und Linux oder so sei! Das funzt leider nich! Aber ich schau mal ob das mit Visual Studio klappt! Danke schon mal!^^
    MFG:DerLateinProfi



  • @audacia
    Ich find's immer ganz schön, wenn man so was mal zu Fuß gemacht hat... Außerdem hatte ich die Funktion gerade irgendwie aus meinem Gedächnis gestrichen 😉



  • Matthias S schrieb:

    Ich find's immer ganz schön, wenn man so was mal zu Fuß gemacht hat... Außerdem hatte ich die Funktion gerade irgendwie aus meinem Gedächnis gestrichen 😉

    aber 'Sleep' ist was ganz anderes als deine prozessorzyklenverbrennschleife... 😉



  • Also hab des mit Visual C++ ausprobiert, und nun hält das ganze Programm an und ist beendet! Das soll ja nicht passieren! Wie kann ich das beheben??????

    MFG:DerLateinProfi



  • Na ich dachte, du willst das Programm unterbrechen? Meints du der schließt das Programm komplett?



  • Also ich will ja keinen nerven, aber Visual C++ sagt sleep sei ein undeklarierter Synatx, oder so, und Miracle C sagt nur error.
    Also ich hab angefangen mit 3dGamestudio zu programmieren. Eigendlich primitiv! ok, aber da gab es sleep und wait! Diese unterbrachen das Programm für eine angegebenen Zeit! So nun wollte ich dies auch in C oder C++ machen! Will nur wissen wie das geht! Weil ich will eine Printf oder Cout anweisung haben, auf die eine Sekunde Später eine weitere folgt! Ich hoffe ihr versteht das! Helft mir Bitte!!!!!!
    Wäre euch sehr dankbar!

    MFG: DerLateinProfi!

    PS: Könnt mir ja mal ein Programm zeigen, wo so was ist! Bitte nich zu komplex!^^ Bin ja noch anfänger!^^ Mir ist auch egal ob C, oder C++! Geht beides!



  • Na aber es wurde doch schon gepostet:

    void warte(double sec) 
    { 
        const DWORD dwWait = GetTickCount(); 
        while(GetTickCount()-dwWait < sec*1000); 
    }
    

    Das schreibst du vor deine

    void main()
    

    anweisung.

    Und aufrufen tust du das ganze dann über

    warte(100)
    


  • Also ich empfehle warte(1), da das schon in der Funktion in Sekunden umgerechnet wird... Ansonsten müsste es aber auch warte(1000) heißen 😉



  • Das war ja auch ein Beispiel...
    Sorry tut mir ja leid 😛 😃



  • voodoopuppe schrieb:

    Das schreibst du vor deine

    void main()
    

    anweisung.

    bitte kein "void main" mehr -..-^
    int main ist besser 😉



  • Mein Compiler gibt's immer als void main() anfangs aus, ändere es zwar selber immer um, dachte aber, dass das Standard ist



  • Also das funktioniert schon mal!^^ Danke! Aber jetzt habe ich ein neues Problem!:

    #include <iostream.h>;
    #include <windows.h>;
    #include <stdio.h>;

    void warte(double sec)
    {
    const DWORD dwWait = GetTickCount();
    while(GetTickCount()-dwWait < sec*1000);
    }

    int main()
    {

    warte(1);
    cout << " __ __ \n";
    warte(1);
    cout << " / \\ / \\ \n";
    warte(1);
    }

    So jetzt wartet er aber 3 Sekunden, und gibt dann alles auf einmal aus! Dass soll er ja nicht!^^ Er soll warten, dann die erste Zeile ausgeben, und dann warten und die zweite ausgeben.....

    Wie geht dass dann?? Was muss ich dafür ändern????

    MFG:DerLateinProfi



  • Du mußt die Ausgabe flushen ( cout.flush(); oder cout<<endl; ).

    (btw, cout gehört nach C++)


Anmelden zum Antworten