J'ai une application de console destinée à J'ai essayé différentes solutions sur Internet, mais aucun d'entre eux n'a travaillé. Soit ils ne fonctionnent pas, ni ils n'affichent pas correctement. P>
5 Réponses :
Vous pouvez utiliser l'appel du système de veille () pour dormir pendant 60 secondes. P>
Vous pouvez suivre ce lien pour définir une minuterie de 60 secondes à l'aide de l'appel système Minuterie en C ++ à l'aide des appels système . P>
Je ne pense pas que tu avais compris ma question. Je veux un compte à rebours b>, pas une minuterie.
Utilisation possible Objets de minuterie servable avec Perion défini sur 1 seconde pour cette tâche. Mise en œuvre possible
VOID CALLBACK TimerAPCProc( __in_opt LPVOID /*lpArgToCompletionRoutine*/, __in DWORD /*dwTimerLowValue*/, __in DWORD /*dwTimerHighValue*/ ) { } void CountDown(ULONG Seconds, COORD dwCursorPosition) { if (HANDLE hTimer = CreateWaitableTimer(0, 0, 0)) { static LARGE_INTEGER DueTime = { (ULONG)-1, -1};//just now ULONGLONG _t = GetTickCount64() + Seconds*1000, t; if (SetWaitableTimer(hTimer, &DueTime, 1000, TimerAPCProc, 0, FALSE)) { HANDLE hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE); do { SleepEx(INFINITE, TRUE); t = GetTickCount64(); if (t >= _t) { break; } if (SetConsoleCursorPosition(hConsoleOutput, dwCursorPosition)) { WCHAR sz[8]; WriteConsoleW(hConsoleOutput, sz, swprintf(sz, L"%02u..", (ULONG)((_t - t)/1000)), 0, 0); } } while (TRUE); } CloseHandle(hTimer); } } COORD dwCursorPosition = { }; CountDown(60, dwCursorPosition);
//Please note that this is Windows specific code #include <iostream> #include <Windows.h> using namespace std; int main() { int counter = 60; //amount of seconds Sleep(1000); while (counter >= 1) { cout << "\rTime remaining: " << counter << flush; Sleep(1000); counter--; } }
Vous pouvez faire une plate-forme inter-plate-forme si vous utilisez std :: this_thread :: sleep_for code>
.
Sans surprise, vous devez #include
en C ++, vous pouvez utiliser le compte à rebours. Veuillez passer en revue avec la logique suivante qui vous permettra de montrer le temps restant à l'écran.
for(int min=m;min>0;min--) //here m is the total minits as per ur requirements { for(int sec=59;sec>=;sec--) { sleep(1); // here you can assign any value in sleep according to your requirements. cout<<"\r"<<min<<"\t"<<sec; } }
Cela pourrait être de certaines aide, ce n'est pas tout à fait clair quelle est la question, mais il s'agit d'un compte à rebours de 10 secondes, vous pouvez modifier les secondes et ajouter des minutes ainsi que des heures.
A Pour boucle qui dort 1 seconde 60 fois?
Qu'est-ce que I> avez-vous essayé? Veuillez lire Les pages d'aide , prendre The So Tour , lisez à propos de Comment poser de bonnes questions , ainsi que Cette question de contrôle . Enfin, apprenez à créer un exemple de reproductible minimal .
Exactement. Mais je dois afficher le temps restant à l'écran et je ne peux pas comprendre comment faire cela. Je ne peux pas comprendre un moyen de ne pas effacer que des parties spécifiques de l'écran.
Que diriez-vous d'utiliser le retour du chariot pour écraser ce que vous avez précédemment écrit? Comme par exemple
Std :: Cout << "\ Rtime restant:" << std :: setw (5) << Compteur << Std :: Flush; Code>
@ H4ze Donc, votre question est réellement "Comment effacer une partie de la console", n'est-ce pas? Si vous recherchez cela, vous allez atterrir à Cette répond. Cela suppose que vous voulez dire la console avec "l'écran", cette partie n'est pas claire.
@SomeProgrammerDude Le commentaire est effectivement travaillé, mais je pense que le compte à rebours est plus rapide que 60 secondes. Comme les secondes réelles sont plus rapides. Voici mon code:
compteur int = 60; tandis que (comptoir> = 1) {cout << "\ rtime restant:" << Setw (5) << Compteur << Flush; _sleep (1000); compteur--; } code>
Utiliser
setwaitableTimer code> avec
complététroutine code> et la période == 1 sec et
SleepEx (Infinite, true); Code> - Imprimer Temps Remaiting du rappel
Il n'est pas nécessaire d'utiliser du code spécifique à Windows si vous avez accès à un compilateur C ++ 11. Vous pouvez remplacer la fonction
veille () code> avec
std :: this_thread :: sleep_for () code>. Jetez un coup d'œil à Cette page .