2013-03-06 70 views
0

因此,我下載了flascc,並與樣本混淆。Stage3D和pthreads

示例09(線程)和示例12(stage3D)自行運行良好,但是當我嘗試在Stage3D示例中運行線程時,它們從未啓動。

這裏是在main()

pthread_t thread; 
printf("Start a thread"); 
int val = pthread_create(&thread, NULL, threadProc, NULL); 


// Setup the stage 
stage = internal::get_Stage(); 
stage->scaleMode = flash::display::StageScaleMode::NO_SCALE; 
stage->align = flash::display::StageAlign::TOP_LEFT; 
stage->frameRate = 60; 

// Ask for a Stage3D context to be created 
s3d = var(var(stage->stage3Ds)[0]); 
s3d->addEventListener(flash::events::Event::CONTEXT3D_CREATE, Function::_new(initContext3D, NULL)); 
s3d->addEventListener(flash::events::ErrorEvent::ERROR, Function::_new(context3DError, NULL)); 
s3d->requestContext3D(flash::display3D::Context3DRenderMode::AUTO, 
         flash::display3D::Context3DProfile::BASELINE_CONSTRAINED); 


// Suspend main() and return to the Flash runloop 
AS3_GoAsync(); 

代碼我已經和這裏的

void *threadProc(void *arg) 
{ 
     printf("From a thread!"); 
} 

ThreadProc的永遠不會被執行的功能。

我發現this手冊頁,但我不認爲那裏有任何東西。我錯過了什麼?

回答

0

線程永遠不會執行,因爲它沒有機會。當它開始的時候(順便說一下,你不能依賴)主程序已經完成了。

以下行添加到您的mainpthread_create後:

pthread_join(thread, NULL); 

,這將等待你的線程來完成它允許線程在運行main之前完成。

live example

+0

對不起,但沒有答案。首先,main()不會退出,因爲AS3_GoAsync()會導致無限循環。 此外,加入線程將導致執行無限期停止。可能會陷入僵局?閃存日誌打印出以下內容: 錯誤:錯誤#1502:腳本執行的時間超過了15秒的默認超時時間。 \t at flash.concurrent :: Condition/wait() \t at global/C_Run :: threadArbCondWait() – Habba 2013-03-06 10:00:54

+1

@Habba你不能指望任何人去尋找你的樣本作爲一件事,其次,如果你不發佈一個包含所有信息的問題,那麼你不能指望一個正確的答案。 – 2013-03-06 10:25:54

+0

但是,如果你不知道樣品,你不能得到答案。 我會編輯更精確的問題。 – Habba 2013-03-06 10:33:13

0

老話題,但我覺得我應該澄清了周圍的人FlasCC(橫橋)和線程監聽。根據我的經驗(在Adobe論壇上有一個關於該論壇的論壇主題)中的「pthread_join」,只是將所有內容都鎖定在FlasCC 1.0.1中並轉發(即與Crossbridge相同)。不知道爲什麼還沒有確定,這是一個非常嚴重的問題。

如果使用FlasCC 1.0進行編譯,pthread_join不鎖定Flash。

至於問題的其餘部分,我不確定 - 只是提到「pthread_join」問題。