GCC 4.4.3 VC 만들기 ++간단한 타이머 응용 프로그램을
2008 내가 타이머 응용 프로그램은 Windows 및 Linux에 이식 될 수 있도록하고 싶습니다. 그러나, 시작하는 것으로 충분할 것입니다.
제 아이디어는 타이머를 시작하고 지정된 시간 (초) 동안 설정하는 것입니다. 시간이 만료되면 콜백 함수를 호출합니다.
이렇게하는 것이 가장 좋은 방법입니까?
많은 감사,
GCC 4.4.3 VC 만들기 ++간단한 타이머 응용 프로그램을
2008 내가 타이머 응용 프로그램은 Windows 및 Linux에 이식 될 수 있도록하고 싶습니다. 그러나, 시작하는 것으로 충분할 것입니다.
제 아이디어는 타이머를 시작하고 지정된 시간 (초) 동안 설정하는 것입니다. 시간이 만료되면 콜백 함수를 호출합니다.
이렇게하는 것이 가장 좋은 방법입니까?
많은 감사,
타이머를 수행하는 방법에는 여러 가지가 있습니다. 어렵지는 않지만 원하는 것을 정확하게 생각해야합니다. 콜백을 호출하려면 일반적으로 콜백을 호출하기 전에 지연이 경과 할 때까지 잠자기 상태 인 스레드를 사용합니다. 스레드를 사용하지 않으려는 경우 시간 델타를 계산하는 검사기 함수를 주기적으로 호출 할 수 있습니다.
api는 지연 및 함수 포인터와 콜백 매개 변수를 취하는 함수입니다. 지연을 위해 휴면 스레드를 시작한 다음 주어진 매개 변수로 콜백을 호출합니다.
일반적인 용도의 라이브러리를 확인하십시오. 일반적으로 타이머는 구현되어 있습니다 (gtk + glib, boost :: timer).
my2c
편집 : 휴대 부분에 대한
, 당신은 타이머 기능의 두 가지 버전을 작성 물론 있습니다. 스레드를 사용한다면 lib를 사용하는 것이 더 낫다는 것을 의미합니다. libs는 타이머를 제공합니다. lib를 사용하십시오 :)
Windows 및 Linux는 타이머를 다르게합니다. 타이밍 기능을 클래스에 캡슐화하는 것이 좋습니다. 두 번 (각 플랫폼에 한 번) 클래스를 작성해야하지만 나머지 프로그램은 동일 할 수 있습니다.
다른 방법으로 누군가 다른 사람이 이미 수행 한 툴킷을 사용할 수 있습니다. 예 : QT 또는 부스트.
저는 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
당신은 "응용 프로그램"같은 소리하지 않습니다 설명; 프로그래밍 인터페이스 (API)의 작은 부분처럼 들립니다. 또한 질문 텍스트가 이상하게 불완전하고 두 번째 문장이 멈 춥니 다. 나는 그것을 편집하는 것이 좋습니다. – unwind
그럴 수있는 기존 라이브러리를 사용할 수 없습니까? "boost :: asio :: deadline_timer"는 찾고있는 도구입니다. –
이 예제를 살펴보십시오. http://www.boost.org/doc/libs/1_43_0/doc/html/boost_asio/example/timers/tick_count_timer.cpp –