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

Timer 用于创建计时器的Vala/SDL回调,timer,callback,sdl,vala,Timer,Callback,Sdl,Vala,我希望每200毫秒刷新一次屏幕,而不必在循环中添加一些代码 因此,我想使用SDL在Vala中创建一个带有回调的计时器 我阅读了文档,但不明白第二个参数是什么: 以下代码编译时没有任何错误: this.timer = new SDL.Timer( 200, () => { this.refresh(); return 0; } ); 编辑:以下是SDL的完整代码: public View( int width, int height, bool fullscreen, string

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

因此,我想使用SDL在Vala中创建一个带有回调的计时器

我阅读了文档,但不明白第二个参数是什么:

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

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()
应该在标准输出上写入内容)

有人能帮我吗(或者有更好的方法来做我想做的事)

谢谢


Damien

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

您是否调用了
SDL.Init(InitFlag.TIMER)
?@haggai\u e起初没有,但是,正如您所看到的,我在开始时添加了它,我没有更多内容。当循环SDL.Event.poll()时,它在这里正确工作。。。使用vala主机(0.14+)。。。完成测试case@lethalman下面是完整的代码:但我还没有使用SDL.Event.poll()。是否必须运行计时器?问题所在的文件: