用于创建计时器的Vala / SDL回调

时间:2011-10-16 16:30:25

标签: timer callback sdl vala

我想每200毫秒刷新一次屏幕,而不必在循环中添加一些代码。

所以,我想使用SDL在Vala中创建一个带回调的Timer。

我阅读了文档,但我不明白作为第二个参数的内容:http://www.valadoc.org/sdl/SDL.Timer.html

以下代码编译时没有任何错误:

this.timer = new SDL.Timer( 200, () => { this.refresh(); return 0; } );

编辑:这是SDL的完整代码:

    public View( int width, int height, bool fullscreen, string window_name = "AKITA application" )
        {

            SDL.init( InitFlag.VIDEO | InitFlag.TIMER );

            this.last_tick = 0;
            this.fps = 25; // Set default value for FPS

            uint32 video_flags = SurfaceFlag.DOUBLEBUF | SurfaceFlag.HWACCEL | SurfaceFlag.HWSURFACE;

            this.screen = Screen.set_video_mode( width, height, 32, video_flags);

            if ( this.screen == null )
            {
                stderr.printf ("Could not set video mode.\n");
            }

            WindowManager.set_caption (window_name, "");

            this.timer = new SDL.Timer( 200, () => { this.refresh(); return 0; } );

        }

    public void refresh()
        {
            stdout.printf( "refresh...\n" );
        }

但没有出现任何内容(refresh()应该在stdout上写一些内容。)

有人可以帮助我吗(或者有更好的方法来做我想做的事)?

谢谢,

达明

1 个答案:

答案 0 :(得分:5)

您必须运行事件循环(例如,使用SDL.Event.wait()SDL.Event.poll()的循环),否则定时器不会被触发。