2013-10-24 2 views
2

У меня есть код здесь, который, вероятно, просто задерживает 10 секунд, прежде чем продолжить, но я хочу добавить функцию, которую пользователь может дождаться этой задержки или нажать любую клавишу, чтобы продолжить , Я знаю, что это будет не так, как delay(10000) || getch(); любым способом сделать это?«Нажмите любую клавишу или подождите 10 секунд для продолжения»

#include <stdio.h> 
#include <conio.h> 
#include <dos.h> 

void main(){ 
    clrscr(); 
    printf("Press Any Key or Wait for 10 Seconds to Continue"); 
    delay(10000); 
    //getch(); 
} 
+2

Вы можете сделать это довольно красиво с помощью ниток. Вы много знаете об этом? – Bathsheba

+0

Вы можете взять временную метку и заняться циклом ожидания ожидания, который заканчивается, когда нажата клавиша или новая отметка времени показывает, что 10 секунд прошли – Leeor

+0

возможный дубликат [Как деактивировать инструкцию ввода через некоторое время?] (Http://stackoverflow.com/questions/18289635/how-to-deactivate-input-statement-after-some-time) – alk

ответ

2
#include <stdio.h> 
#include <conio.h> 
#include <dos.h> 

void main() 
{ 
    int wait = 10000; 

    clrscr(); 
    printf("Press Any Key or Wait for 10 Seconds to Continue\n"); 

    while(!kbhit() && wait > 0) 
    { 
     delay(100); 
     wait -= 100; 
    } 
} 
+0

http://cboard.cprogramming.com/c-programming/63166-kbhit -linux.html имеет реализацию '_kbhit' для linix, если вам это нужно. – AShelly

+4

Не очень портативный. – alk

+0

@alk Сэр, термин «портативный» для меня новичок? Какой недостаток, если я использую этот «Не очень портативный» код? – 707

2

Это на самом деле довольно легко с помощью alarm:

printf("Press Any Key or Wait for 10 Seconds to Continue"); 
alarm(10); 
getch(); 
alarm(0); 

Вам может понадобиться установить обработчик на SIGALRM хотя.

+0

Пожалуйста, посмотрите мой комментарий к OP, для ссылки на полный пример с использованием этого подхода. – alk

Смежные вопросы