Re: [問題] 關於Windows form的Thread

看板C_and_CPP作者 (累人啊....)時間16年前 (2009/12/29 16:30), 編輯推噓1(107)
留言8則, 3人參與, 最新討論串2/2 (看更多)
※ 引述《tyc5116 (累人啊....)》之銘言: : 如題,請問一下,我現在有一個功能要實現,但是弄不出來 : 透過Thread再來產生Thread : ex Thread1執行fun()函數 : fun(){ : if (XXX) : 再產生一個Thread,執行fun1(); : } : 這裡有extern的問題 : 因為全域或靜態變數不能有 Managed 型別 : 所以array<Thread ^>^ ThreadMove=gcnew array<Thread^>(10); : 我宣告在Form1中,為區域變數 : 而在a.cpp中 : gcroot<array<Thread^>^ > ThreadMove; : void fun(){ : array<System::Threading::Thread^>^ I_ThreadMove=ThreadMove; : } : compiler會過,但實際執行便會出錯,錯誤訊息如下 : 'System.NullReferenceException' 類型的例外狀況發生於 Interface4.exe,但使用者 : 程式碼未加以處理 : 其他資訊: 並未將物件參考設定為物件的執行個體 : 請問我要怎麼修改呢? : 謝謝 : → james732:你的 a.cpp 裡的 ThreadMove 根本沒有實體呀 12/29 15:54 : → tyc5116:目前問題就在於他怎麼去連結到主程式的ThreadMove@@ 12/29 16:05 : → james732:不懂你的func, func1, ThreadMove之間的關係 12/29 16:17 : → tyc5116:ThreadMove為型態Thread的陣列,裡面的Thread分別觸發fun1 12/29 16:20 : → tyc5116:可以把Thread1當作是個分配的工具,當某個條件成立,便拿 12/29 16:21 : → tyc5116:ThreadMove內的其中一個Thread去執行函數 12/29 16:21 大概類似這樣吧 void a(); void b(); void c(); void fun(){ if (條件A) a();//會執行5秒 if (條件B) b();//會執行5秒 if (條件C) c();//會執行5秒 } int main(){ fun(); return 0; } 當三個都成立時,我希望執行時間應該是約5秒,而不是約15秒,所以要用thread Thread1來執行fun(),當一個條件成立,便以一個Thread來執行函數 功能大概是要這樣吧,只是有一個限制 不是當成立時才產生一個thread,而要在程式執行時便將thread新增 恩....大概就是這樣吧,希望有表達的清楚 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 163.18.48.28

12/29 18:33, , 1F
你的func有做事嗎? 如果只是單純等五秒 你乾脆
12/29 18:33, 1F

12/29 18:33, , 2F
if(A||B||C) wait5sec();
12/29 18:33, 2F

12/29 18:34, , 3F
如果是三個東西都有做事要花上5 除非你有三顆CPU 不然不
12/29 18:34, 3F

12/29 18:34, , 4F
會比較快 thread在此不能增加實際的computation power
12/29 18:34, 4F

12/29 18:35, , 5F
如果你是要執行整個時間五秒 那就五秒後把他們砍掉
12/29 18:35, 5F

12/29 18:56, , 6F
5秒後砍掉是什麼意思?
12/29 18:56, 6F

12/30 01:20, , 7F
就是五秒後強制結束吧
12/30 01:20, 7F

12/30 01:27, , 8F
後來暫時解決這問題了,謝謝
12/30 01:27, 8F
文章代碼(AID): #1BERubAd (C_and_CPP)
文章代碼(AID): #1BERubAd (C_and_CPP)