我正在努力從一個額外的線程調用雜波功能。 我使用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