Jaka jest metoda korzystania z timera w C? Muszę poczekać do 500 ms na zadanie. Proszę wspomnieć o dobrym sposobie wykonywania tej pracy. Użyłem sleep(3);
Ale ta metoda nie działa w tym czasie. Mam coś, co spróbuję do tego czasu, aby uzyskać jakiekolwiek dane wejściowe.Jak korzystać z timera w C?
Odpowiedz
Można użyć funkcji struct time_t
i clock()
z time.h.
Zapisz czas rozpoczęcia w strukturze time_t
za pomocą clock()
i sprawdź czas, który upłynął, porównując różnicę między czasem przechowywania a aktualnym czasem.
Czy powinien być w pętli? –
To zależy od tego, co chcesz zrobić. Jeśli twój program oparty na dużej pętli, możesz umieścić go w środku. W przeciwnym razie musisz utworzyć dedykowany wątek do zapętlenia zegara. – Qutus
Oto rozwiązanie użyłem (potrzebuje #include <time.h>
):
int msec = 0, trigger = 10; /* 10ms */
clock_t before = clock();
do {
/*
* Do something to busy the CPU just here while you drink a coffee
* Be sure this code will not take more than `trigger` ms
*/
clock_t difference = clock() - before;
msec = difference * 1000/CLOCKS_PER_SEC;
iterations++;
} while (msec < trigger);
printf("Time taken %d seconds %d milliseconds (%d iterations)\n",
msec/1000, msec%1000, iterations);
Może być to przykłady pomogą wam
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
/*
Implementation simple timeout
Input: count milliseconds as number
Usage:
setTimeout(1000) - timeout on 1 second
setTimeout(10100) - timeout on 10 seconds and 100 milliseconds
*/
void setTimeout(int milliseconds)
{
// If milliseconds is less or equal to 0
// will be simple return from function without throw error
if (milliseconds <= 0) {
fprintf(stderr, "Count milliseconds for timeout is less or equal to 0\n");
return;
}
// a current time of milliseconds
int milliseconds_since = clock() * 1000/CLOCKS_PER_SEC;
// needed count milliseconds of return from this timeout
int end = milliseconds_since + milliseconds;
// wait while until needed time comes
do {
milliseconds_since = clock() * 1000/CLOCKS_PER_SEC;
} while (milliseconds_since <= end);
}
int main()
{
// input from user for time of delay in seconds
int delay;
printf("Enter delay: ");
scanf("%d", &delay);
// counter downtime for run a rocket while the delay with more 0
do {
// erase the previous line and display remain of the delay
printf("\033[ATime left for run rocket: %d\n", delay);
// a timeout for display
setTimeout(1000);
// decrease the delay to 1
delay--;
} while (delay >= 0);
// a string for display rocket
char rocket[3] = "-->";
// a string for display all trace of the rocket and the rocket itself
char *rocket_trace = (char *) malloc(100 * sizeof(char));
// display trace of the rocket from a start to the end
int i;
char passed_way[100] = "";
for (i = 0; i <= 50; i++) {
setTimeout(25);
sprintf(rocket_trace, "%s%s", passed_way, rocket);
passed_way[i] = ' ';
printf("\033[A");
printf("| %s\n", rocket_trace);
}
// erase a line and write a new line
printf("\033[A");
printf("\033[2K");
puts("Good luck!");
return 0;
}
plik kompilacji, uruchom i usuwać po (moje preferencje)
$ gcc timeout.c -o timeout && ./timeout && rm timeout
Spróbuj uruchomić go dla siebie, aby zobaczyć wynik.
Uwagi:
środowisku testowym
$ uname -a
Linux wlysenko-Aspire 3.13.0-37-generiC#64-Ubuntu SMP Mon Sep 22 21:28:38 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
$ gcc --version
gcc (Ubuntu 4.8.5-2ubuntu1~14.04.1) 4.8.5
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- 1. Jak korzystać z timera w aplikacji konsoli VB.Net?
- 2. Uzyskiwanie dokładnych odgłosów z timera w C#
- 3. Kpiny z timera C# z Moq
- 4. jak korzystać z odwrotnego C
- 5. Jak korzystać z TransactionScope w języku C#?
- 6. Jak korzystać z właściwości w języku C#?
- 7. Jak korzystać z flag bitowych w C++?
- 8. Jak korzystać z GetProcessMemoryInfo w C++?
- 9. Jak korzystać z funkcji klasy w C++?
- 10. Jak korzystać z klas C++ z ctypes?
- 11. Korzystanie z timera i grę pętlę
- 12. Jak korzystać z biblioteki C z D?
- 13. Jak korzystać z QueryPerformanceCounter?
- 14. Jak znaleźć źródło wątku timera?
- 15. Android: Dostęp UI Element z gwintem timera
- 16. Cel C - Jak korzystać z zmiennych zewnętrznych?
- 17. C# DataSet.Relations: Jak korzystać z powiązań DataSet?
- 18. Cel C - Jak korzystać z metody initWithCoder?
- 19. Testowanie zdarzenia timera w Akka
- 20. Jak anulować wykonanie timera sprężynowego
- 21. Jak korzystać z DLLImport z structs jako parametry w C#?
- 22. Jak korzystać z pseudo-terminali w systemie Linux z C?
- 23. Jak korzystać z istniejącego profilu Firefoksa w C# w Selenium?
- 24. Jak korzystać z foreach w C++ cli w zarządzanym kodzie
- 25. Jak korzystać z TCharHelper?
- 26. Jak korzystać z find_module?
- 27. Jak korzystać z Microsoft.Scripting.Hosting?
- 28. Jak korzystać z QTextBlock?
- 29. Jak korzystać z cscope?
- 30. Jak korzystać z MPI_Type_create_subarray?
select, sonda, epoll ... Czego chcesz? –
To jest zduplikowane pytanie. Zobacz http://stackoverflow.com/questions/459691/best-timing-method-in-c – pcbabu
@Eddy_Em co to jest wybór, ankieta, epoll? Chcę ustawić zegar na 5 sekund. Jeśli użytkownik wprowadzi dane w tym czasie, dane wejściowe zostaną uznane za prawidłowe. –