2009-05-15 7 views
6

UNIX 및 Windows에서 C의 JavaScript setTimeout과 비슷한 점에 관심이 있습니다.C 타이머 콜백

는 기본적으로, 내가 원하는 :

start_timer(&function_pointer, int time_in_secs) 

또는 내가 얻을 수있는 것과 같은 가깝습니다.

또한

, (이 콜백 n 초마다 호출) 좋을 것이다 setInterval을 비슷한,하지만에서는 setTimeout : UNIX의

+0

, 나는에 대한 별도의 답변을 유닉스와 윈도우. SDL을 사용할 수 있지만 여기에 대한 답변은 괜찮습니다. 나는 그 부분에 대답 한 사람이 하나뿐이기 때문에 창문 하나만 받아 들일뿐입니다. – singpolyma

답변

8

SetTimer (Win32의 경우) TimerProc을 콜백으로 사용합니다. 당신이 신호를 사용하지 않고 직접 기능을 호출을 다시 지정할 수 있습니다로

/* calls TimerProc once every 60000 milliseconds */ 
SetTimer(NULL, 1, 60000, TimerProc); 
2

, man setitimer를 사용하여 구현 될 수있다.

1

경보()과 setitimer은 (에 대한 일부 정보) 당신은 휴대용 코드가 필요하면, 당신이 그들보다 더 많은 휴대용 아무것도 쓸 수있는 높은 가능성이있다. upcall 함수는 시그널 핸들러이기 때문에, 시그널 핸들러와 관련된 모든 제약 사항과 제한 사항이 있습니다. 자세한 내용은 here입니다.

첫 번째 링크에서 언급했듯이 alarm()은 POSIX 기반이며 setitimer()는 더 유연합니다.

+0

현재 POSIX 사양에서는 setitimer() 및 getitimer()가 구식이며 이후 버전에서 제거 될 수 있다고합니다. 권장 대체품은 timer_gettime() 및 timer_settime()입니다. –

+0

@Jonathan, 네가 맞아. glibc 문서가 POSIX가 아닌 인터페이스 인 setitimer()/getitimer()와 관련하여 올바르지 않거나 오해의 소지가있는 것처럼 보입니다. 1003.1의 2004 버전보다 최신 버전이 온라인에 있습니까? 내가 찾을 수있는 최선의 방법은 다음과 같습니다 : http://www.unix.org/single_unix_specification/. –

+0

오픈 그룹 기본 사양 문제 7 IEEE Std 1003.1 ™ -2008 (http://www.opengroup.org/onlinepubs/9699919799/toc.htm) –

5

당신은 POSIX 간격 타이머, timer_create 및 timer_settime을 시도 할 수 있습니다. 타이머가 한 번만 만료 (그리고 계속 반복되지 않음)에 도착 :

timer_settime : 타이머가 값의 it_interval 구성원에 의해 지정된 값 으로 설정되어야한다 의 재 장전 값입니다. 타이머가 이 아닌 it_interval으로 활성화되면 주기적 (또는 반복) 타이머가 지정됩니다. 여기

은 kernel.org에서 리눅스 프로그래머 매뉴얼에서 좋은 예 이러한 타이머를 사용하여 광범위한 문서입니다 : 나는이 개 답변을 받아 들일 수 없다

timer_create - create a POSIX per-process timer