小编ver*_*sap的帖子

C++ - Clutter 1.0 - 从线程调用函数会导致段错误

我正在努力从一个额外的线程调用一个杂乱的函数.我使用boost :: thread进行线程化和clutter库1.0.

具体来说,该线程包含一个循环函数,该函数每隔一段时间发出一个带有x和y坐标参数的boost :: signals2 :: signal.该信号连接到一个函数,该函数将这些变量置于混乱状态,即x,y in

clutter_stage_get_actor_at_pos(CLUTTER_STAGE(演员),CLUTTER_PICK_ALL,x,y);

这就是我遇到段错误的地方.

显然杂乱有一些线程处理程序.我试着打电话

g_thread_init(NULL);

clutter_threads_init();

在启动clutter_main()之前.我也尝试将杂乱函数包含在内

clutter_threads_enter();

clutter_stage_get_actor_at_pos(CLUTTER_STAGE(演员),CLUTTER_PICK_ALL,x,y);

clutter_threads_leave();

但这也不行.

每个提示都表示赞赏,谢谢你提前!

附录

我只是伪造了我想要做的最小样本.我按照建议"保护"了clutter_main()例程.杂乱的一些功能似乎从单独的线程起作用(例如,设置舞台颜色或设置演员位置).我的代码还有问题吗?

#include <clutter/clutter.h>
#include <boost/thread.hpp>


ClutterActor *stage;
ClutterActor* rect = NULL;


void receive_loop()
{
while(1)
{
    sleep(1);
    clutter_threads_enter();

    ClutterActor* clicked =  clutter_stage_get_actor_at_pos(CLUTTER_STAGE(stage), CLUTTER_PICK_ALL,300, 500);

    clutter_threads_leave();
}

}


int main(int argc, char *argv[]) 
{

    clutter_init(&argc, &argv);

g_thread_init(NULL);
clutter_threads_init();


    stage = clutter_stage_get_default();
    clutter_actor_set_size(stage, 800, 600);


rect = clutter_rectangle_new();
clutter_actor_set_size(rect, 256, 128);
clutter_actor_set_position(rect, 300, 500);
clutter_group_add (CLUTTER_GROUP (stage), rect);    


    clutter_actor_show(stage);


boost::thread thread …
Run Code Online (Sandbox Code Playgroud)

c++ multithreading boost signals clutter

6
推荐指数
2
解决办法
1767
查看次数

标签 统计

boost ×1

c++ ×1

clutter ×1

multithreading ×1

signals ×1