DIY 一个用于显示 PDF 页面的 Clutter Actor

Clutter 不支持多线程

Garfileo posted @ 2012年5月21日 08:34 in Clutter 笔记 with tags clutter cairotexture multiple thread , 3543 阅读

看这个简单的例子:

#include <clutter/clutter.h>

static gpointer
gen_slide (gpointer data)
{
        return clutter_cairo_texture_new (800.0, 600.0);
}

static gboolean
on_stage_button_press (ClutterActor *stage, ClutterEvent *event, gpointer data)
{
        g_thread_new ("test", gen_slide, NULL);
        return TRUE; 
}

int
main(int argc, char *argv[])
{
        if (clutter_init (&argc, &argv) != CLUTTER_INIT_SUCCESS)
                return 1;

        ClutterColor stage_color = { 0x21, 0x43, 0x5e, 0xff };
        ClutterActor *stage = clutter_stage_get_default ();
        clutter_stage_set_title (CLUTTER_STAGE (stage), "CairoTexture!");
        clutter_actor_set_size (stage, 400, 400);
        clutter_stage_set_color (CLUTTER_STAGE (stage), &stage_color);
        clutter_stage_set_user_resizable (CLUTTER_STAGE (stage), TRUE);

        clutter_actor_show_all (stage);

        g_signal_connect (stage, "destroy", G_CALLBACK (clutter_main_quit), NULL);
        g_signal_connect (stage, "button-press-event", G_CALLBACK (on_stage_button_press), NULL);
        
        clutter_main ();
           
        return 0;
}

编译它:

gcc `pkg-config --cflags --libs clutter-1.0` test.c

这个程序需要 >=glib-2.32 版本的支持。运行程序时,鼠标点一下窗口内部区域,在我这里程序便会崩溃。不知是不是只有我遇到这个问题。

这样子,Cikada 就没法实现单独加载 pdf 页面的线程了。

转载时,希望不要链接文中图片,另外请保留本文原始出处:http://garfileo.is-programmer.com

  • 无匹配
Avatar_small
views63 说:
2012年5月21日 09:55

>运行程序时,鼠标点一下窗口内部区域,在我这里程序便会崩溃。
我这边也一样出错。

Avatar_small
Garfileo 说:
2012年5月21日 10:37

看来是 clutter 的 bug,我个反馈一下

Avatar_small
Garfileo 说:
2012年5月26日 16:27

原来 clutter 不是线程安全的。

http://lists.clutter-project.org/pipermail/clutter-devel-list/2012-May/000372.html


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter