2017-01-11 8 views
0

에 입력 :비 블로킹 우리는 매우 간단한 카운터 사용은 ncurses를 취할 경우 Gforth

cbreak()Ctrl 키을 사용하여 있기 때문에, 어떤 키 (OK를 누른 후 중단
#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 
#include <ncurses.h> 

int main(void) { 
    struct timespec start; 
    clock_gettime(CLOCK_REALTIME, &start); 
    initscr(); 
    cbreak(); 
    nodelay(stdscr, TRUE); 
    { 
    int key = -1; 
    struct timespec delay, now; 
    do { 
     clock_gettime(CLOCK_REALTIME, &delay); 
     delay.tv_sec = 0; 
     delay.tv_nsec = 1000L * 1000L * 1000L - delay.tv_nsec; 
     nanosleep(&delay, NULL); 
     clock_gettime(CLOCK_REALTIME, &now); 
     mvprintw(1, 1, "%ld\n", (long)(now.tv_sec - start.tv_sec)); 
     refresh(); 
     key = getch(); 
     if (key >= 0) 
     break; 
    } while (now.tv_sec - start.tv_sec < 60); 
    } 
    endwin(); 
    return 0; 
} 

-C 항상없이 작동합니다 추가 노력 ...).

하지만 카운터를 일시 중지하거나 즉시 재설정하는 기능 (예 : +/- 1 초)을 추가하는 것과 같이 더 복잡하게 만들 수 있습니다.

확실히 차단되지 않는 키보드 입력이 필요합니다.

Gforth에서이 작업을 수행 할 수 있습니까? 좋아, 내가 SIGINT 같은 인터럽트를 잡는 방법을 알고 있지만, 위와 같은, 어떤 키 또는 어떤 미리 결정된 열쇠를 위해 일하고?

+0

이 질문으로 C 태그를 제거합니다. IMO는 C와 거의 관련이 없습니다 (즉, C 프로그래머의 관심을받지 못함). 동의하지 않으면 다시 추가하십시오. – jforberg

답변

2

key?, returns a flag을 사용하십시오. 새 입력을 사용할 수 있으면 참입니다.

다음 코드를 적절하게 보완 할 수 있지만 키를 누를 때까지 루프에서 실행한다는 기본 개념을 설명한다고 생각합니다.

: run-until-key (--) 
    0 
    begin 
     \ place your terminal code here 
     ." Num:" dup . cr 
     1+ 
    key? until drop ; 

특정 키를 기다려야합니다

, 단지 추가 때까지 이전하는 경우 :

... 
key? if key 13 = else false then until 
... 

또한 타이머가 추가 할 수 있습니다.