2010-06-21 5 views
1

GCC 4.4.3 VC 만들기 ++간단한 타이머 응용 프로그램을

2008 내가 타이머 응용 프로그램은 Windows 및 Linux에 이식 될 수 있도록하고 싶습니다. 그러나, 시작하는 것으로 충분할 것입니다.

제 아이디어는 타이머를 시작하고 지정된 시간 (초) 동안 설정하는 것입니다. 시간이 만료되면 콜백 함수를 호출합니다.

이렇게하는 것이 가장 좋은 방법입니까?

많은 감사,

+0

당신은 "응용 프로그램"같은 소리하지 않습니다 설명; 프로그래밍 인터페이스 (API)의 작은 부분처럼 들립니다. 또한 질문 텍스트가 이상하게 불완전하고 두 번째 문장이 멈 춥니 다. 나는 그것을 편집하는 것이 좋습니다. – unwind

+0

그럴 수있는 기존 라이브러리를 사용할 수 없습니까? "boost :: asio :: deadline_timer"는 찾고있는 도구입니다. –

+1

이 예제를 살펴보십시오. http://www.boost.org/doc/libs/1_43_0/doc/html/boost_asio/example/timers/tick_count_timer.cpp –

답변

1

타이머를 수행하는 방법에는 여러 가지가 있습니다. 어렵지는 않지만 원하는 것을 정확하게 생각해야합니다. 콜백을 호출하려면 일반적으로 콜백을 호출하기 전에 지연이 경과 할 때까지 잠자기 상태 인 스레드를 사용합니다. 스레드를 사용하지 않으려는 경우 시간 델타를 계산하는 검사기 함수를 주기적으로 호출 할 수 있습니다.

api는 지연 및 함수 포인터와 콜백 매개 변수를 취하는 함수입니다. 지연을 위해 휴면 스레드를 시작한 다음 주어진 매개 변수로 콜백을 호출합니다.

일반적인 용도의 라이브러리를 확인하십시오. 일반적으로 타이머는 구현되어 있습니다 (gtk + glib, boost :: timer).

my2c

편집 : 휴대 부분에 대한

, 당신은 타이머 기능의 두 가지 버전을 작성 물론 있습니다. 스레드를 사용한다면 lib를 사용하는 것이 더 낫다는 것을 의미합니다. libs는 타이머를 제공합니다. lib를 사용하십시오 :)

1

Windows 및 Linux는 타이머를 다르게합니다. 타이밍 기능을 클래스에 캡슐화하는 것이 좋습니다. 두 번 (각 플랫폼에 한 번) 클래스를 작성해야하지만 나머지 프로그램은 동일 할 수 있습니다.

다른 방법으로 누군가 다른 사람이 이미 수행 한 툴킷을 사용할 수 있습니다. 예 : QT 또는 부스트.

0

저는 C와 C++ 둘 다에서 이러한 타이머를 여러 개 사용했습니다. 다음 URL에있는 C GTK 예제에서는 http://zetcode.com/tutorials/gtktutorial/gtkevents/이 도움이 될 수 있습니다. C++에서는 glib 타이머 https://developer.gnome.org/glibmm/2.34/classGlib_1_1SignalTimeout.html을 사용했습니다 (정확하지는 않지만). 또한 리눅스에서 epoll()을 사용하고 Windows에서 select()를 사용하는 libev를 사용하여보다 정밀도가 높은 타이머를 사용할 수 있습니다. C, 나는 libev보기에 대한 자세한 문서를 들어

//This program is demo for using pthreads with libev. 
//Try using Timeout values as large as 1.0 and as small as 0.000001 
//and notice the difference in the output 

//(c) 2013 enthusiasticgeek for stack overflow 
//Free to distribute and improve the code. Leave credits intact 
//On Ubuntu (assuming libev is installed) compile with the command - gcc -g test.c -o test -lev 

#include <ev.h> 
#include <stdio.h> // for printf 
#include <stdlib.h> 

double timeout = 1.0; //seconds 
ev_timer timeout_watcher; 
int timeout_count = 0; 

static void timeout_cb (EV_P_ ev_timer *w, int revents) // Timer callback function 
{ 
    ++timeout_count; 
    printf("%d\n", timeout_count); 
    w->repeat = timeout; 
    ev_timer_again(loop, &timeout_watcher); //Start the timer again. 
} 

int main (int argc, char** argv) 
{ 
    struct ev_loop *loop = EV_DEFAULT; //or ev_default_loop (0); 
    ev_timer_init (&timeout_watcher, timeout_cb, timeout, 0.); // Non repeating timer. The timer starts repeating in the timeout callback function 
    ev_timer_start (loop, &timeout_watcher); 

    // now wait for events to arrive 
    ev_loop(loop, 0); 

    return 0; 
} 

아래의 예를 제시 http://doc.dvgu.ru/devel/ev.html

관련 문제