我正在努力从一个额外的线程调用杂波功能。 我使用boost :: thread进行线程和杂乱库1.0。C++ - Clutter 1.0 - 从线程调用函数导致段错误
具体来说,线程包含一个循环函数,每隔一段时间就会发出带有x和y坐标参数的boost :: signals2 :: signal。 该信号被连接到一个函数,它的手在
clutter_stage_get_actor_at_pos(CLUTTER_STAGE(演员), CLUTTER_PICK_ALL,X,Y)的那些变量杂波,即X,Y;
这就是我得到段错误的地方。
显然混乱有一些线程处理例程。我试过打电话
g_thread_init(NULL);
clutter_threads_init();
在启动clutter_main()之前。我也尝试在
中包含杂波功能clutter_threads_enter();
clutter_stage_get_actor_at_pos(CLUTTER_STAGE(actor), 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 = boost::thread(&receive_loop);
clutter_threads_enter();
clutter_main();
clutter_threads_leave();
return 0;
}
因为您没有使用任何Boost魔法,所以更改您的代码以使用pthread而不是boost :: thread,并且此处大多数人都没有安装它。 – karlphillip 2010-10-12 18:43:46