線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1427
推到 Plurk!
推到 Facebook!

MultiThread 一問

答題得分者是:lu
newfbimod
一般會員


發表:3
回覆:9
積分:2
註冊:2004-11-08

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-01-04 14:04:07 IP:203.69.xxx.xxx 未訂閱
各位前輩, 想請問 若我先create 一個thread(thread1),然後我在它的Execute()裡,又create 另一個thread(thread2)然後讓它也去run, 那麼他們兩個狀態是同時在run嗎< 還是thread1的Execute()先執行完,再去Run thread2的Execute裡面的東西阿?
lu
高階會員


發表:11
回覆:189
積分:195
註冊:2003-11-19

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-01-04 14:19:54 IP:221.169.xxx.xxx 未訂閱
引言: 各位前輩, 想請問 若我先create 一個thread(thread1),然後我在它的Execute()裡,又create 另一個thread(thread2)然後讓它也去run, 那麼他們兩個狀態是同時在run嗎< 還是thread1的Execute()先執行完,再去Run thread2的Execute裡面的東西阿?
在一個前提之下,如果你2個Thread都是一CREATE就執行的話,那是的,2個THREAD會同時執行 ========================= <>大家一起快樂寫程式
newfbimod
一般會員


發表:3
回覆:9
積分:2
註冊:2004-11-08

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-01-04 14:32:00 IP:203.69.xxx.xxx 未訂閱
那...如果說我thred2, 一create先讓它Suspend(),但緊接著又讓它做Resume()的動作的話,那它實際上有在run嗎?還是要等thread1先執行完thred2才能跑呢?
Zard
尊榮會員


發表:24
回覆:396
積分:539
註冊:2003-11-26

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-01-08 02:16:22 IP:61.62.xxx.xxx 未訂閱
引言: 那...如果說我thred2, 一create先讓它Suspend(),但緊接著又讓它做Resume()的動作的話,那它實際上有在run嗎?還是要等thread1先執行完thred2才能跑呢?
不用等Thread1跑完. 當呼叫Resume時Thread2就會繼續執行.
newfbimod
一般會員


發表:3
回覆:9
積分:2
註冊:2004-11-08

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-01-08 10:41:36 IP:203.69.xxx.xxx 未訂閱
不好意思唷,那如果呼叫Resume, thread2就執行的話 那為什麼我在thread 2裡設立了一個flag, 當執行一些運算後會將flag設為true(預設值為false),那當thread1檢查這個flag,發現為true時再繼續自己的運算,可是當我再跑的時候會發現thread2好像完全沒有work的感覺,使得flag一直都是false,跟預期的結果不太依樣,所以才會問是不是要等thread1跑完thread2才會執行,因為在debug時發現,是先把thread1執行完,緊接著才會跑thread2這時flag才會變成true,可是此時我的thread1已經跑完囉< > 這到底是為什麼呢< > 希望大大解惑.......... PS 希望我的表達你看得懂
lu
高階會員


發表:11
回覆:189
積分:195
註冊:2003-11-19

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-01-10 09:44:13 IP:221.169.xxx.xxx 未訂閱
引言: 不好意思唷,那如果呼叫Resume, thread2就執行的話 那為什麼我在thread 2裡設立了一個flag, 當執行一些運算後會將flag設為true(預設值為false),那當thread1檢查這個flag,發現為true時再繼續自己的運算,可是當我再跑的時候會發現thread2好像完全沒有work的感覺,使得flag一直都是false,跟預期的結果不太依樣,所以才會問是不是要等thread1跑完thread2才會執行,因為在debug時發現,是先把thread1執行完,緊接著才會跑thread2這時flag才會變成true,可是此時我的thread1已經跑完囉 這到底是為什麼呢 希望大大解惑..........
你這個方法在單工系統可行,但是在多工系統.......恩....不太好喔 建議你改用EVENT來做 如下例:
先在Thread1 和 Thread2 一開始的地方加上
__fastcall TThread1() 
{
//...原來的CODE
EventObj = CreateEvent(NULL,FALSE,FALSE,"TEST_Event_Object");
}    然後在THREAD1內原來再等待FLAG的地方改為
void __fastcall Thread1Execute()
{
//原來等待FLAG的地方
WaitForSingleObject (EventObj,INFINITE);
}    然後在THREAD2內,將原來flag設為true取代成
void __fastcall Thread2Execute()
{
//原來將flag設為true取代成
SetEvent(EventObj);
}
試試看吧 ========================= 大家一起快樂寫程式
系統時間:2024-06-30 14:47:47
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!