创建一个简单的计时器应用

时间:2010-06-21 08:49:54

标签: c windows linux

gcc 4.4.3 vc ++ 2008

我想让一个计时器应用程序可以在Windows和Linux上移植。但是,从一开始就足够了。

我的想法是启动计时器并将其设置指定的秒数。当时间到期时调用回调函数。

这是最好的方法吗?

非常感谢,

3 个答案:

答案 0 :(得分:1)

Windows和Linux的定时器不同。我建议你将计时功能封装到一个类中。您必须两次编写类(每个平台一次),但程序的其余部分可以相同。

或者你可以使用一个工具包,其他人已经为你做了气体。例如QT或Boost。

答案 1 :(得分:1)

有很多方法可以做一个计时器。这并不难,但你需要准确地思考你想要的东西。如果你想调用一个回调函数,你通常会在调用回调之前使用一个休眠的线程,直到你的延迟结束。如果您不想使用线程,则可以定期调用计算时间增量的检查器函数。

你api将是一个延迟函数和函数指针以及回调参数的函数。它将启动一个将为延迟休眠的线程,然后使用给定的参数调用回调。

检查通用库,它们通常都有定时器(我认为是gtk + glib,boost :: timer)。

MY2C

编辑:

对于可移植性部分,您当然要编写两个版本的计时器功能。如果你使用线程意味着最好使用lib。由于libs为你提供计时器...使用lib:)

答案 2 :(得分:0)

我曾在C和C ++中使用过几个这样的计时器。对于C GTK,以下网址上的示例可能会有所帮助http://zetcode.com/tutorials/gtktutorial/gtkevents/。在C ++中,我使用了glib计时器https://developer.gnome.org/glibmm/2.34/classGlib_1_1SignalTimeout.html(虽然它不精确)。我也使用libev(在Linux上使用epoll()和在Windows上使用select())以获得更好的精确计时器。对于C,我在下面给出一个例子

//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;
}

有关libev view http://doc.dvgu.ru/devel/ev.html

的更多文档