我正在努力从一个额外的线程调用一个杂乱的函数。我使用 boost::thread 进行线程处理,并使用杂乱库 1.0。
具体来说,该线程包含一个循环函数,该函数每隔一段时间发出带有 x 和 y 坐标参数的 boost::signals2::signal 。该信号连接到一个函数,该函数将这些变量交给杂波,即 x,y in
clutter_stage_get_actor_at_pos(CLUTTER_STAGE(演员),CLUTTER_PICK_ALL,x,y);
这就是我遇到段错误的地方。
显然,clutter 有一些线程处理例程。我试着打电话
g_thread_init(NULL);
混乱线程初始化();
在开始 clutter_main() 之前。我还尝试将杂乱功能包含在
混乱线程输入();
clutter_stage_get_actor_at_pos(CLUTTER_STAGE(演员),CLUTTER_PICK_ALL,x,y);
混乱线程离开();
但这也不起作用..
感谢您的每一个提示,在此先感谢您!
附录
我只是伪造了我正在尝试做的最小样本。我已经按照建议“保护”了 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 = boost::thread(&receive_loop);
clutter_threads_enter();
clutter_main();
clutter_threads_leave();
return 0;
}