none
多執行緒的執行問題 RRS feed

  • 問題

  • 各位先進好!目前小弟有一個多執行緒的問題想要請教,

    我有兩個執行緒要執行,一個為傳送,一個為接收,

    我想要做到先傳送完後再做接收,但是我用監控下去監看程式,

    它似乎沒有按照我的順序再跑,每次都是先跑完"接收"再跑"傳送"再跑"接收",

    我有上網爬過文,多執行緒似乎是沒有辦法控制它的執行順序,它是個同步執行的功能,

    但是可以使用join這個功能,於是我使用了join這個功能,測試起來就可以達到先"傳送"再"接收"的功能,

    可是我用監控去觀察程式發現他在最後"接收"的程式碼又會重覆觸發一次,雖然結果是對的,但是我總是覺得怪!

    不知道各位先進有甚麼解決的辦法,可以讓它乖乖地執行"傳送"再"接收",再請各位先進指導,感謝!

    以下是我的片段程式碼,請參考

     private void SendBtn_Click(object sender, EventArgs e)
            {
                Comport = CreateComport(Comport);
                if (!Sending && OpenComport(Comport)) 
                {
                    Thread Th1 = new Thread(SendData); // 利用多執行緒Thread的方式來傳送值 
                    Thread Th2 = new Thread(DoReceive); //執行多型緒Thread內的DoReceive
                    Th1.IsBackground = true; 
                    Th1.Start(Comport as Object); //執行Thread(SendData)
                    Thread.Sleep(30);
                    Th1.Join();
                    Receiving = true;              
                    Th2.IsBackground = true; //把背景打開
                    Th2.Start(Comport as Object); //執行多型緒Thread內的DoReceive開始執行 
                    //Th2.Join(); //加入Th2.Join();會當機
                    Thread.Sleep(30);
                     }

    2018年8月10日 上午 07:57

解答

  • 如果你是 發送-接收模型。把行為寫在同一個執行緒就可以了。海角點部落中序列埠的 15~19 就是在講這個。我認為是沒有必要把兩個行為拆開到兩個執行緒。


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。 https://skilltree.my/

    • 已標示為解答 seanhua 2018年8月10日 上午 10:17
    2018年8月10日 上午 08:19
    版主

所有回覆

  • 如果你是 發送-接收模型。把行為寫在同一個執行緒就可以了。海角點部落中序列埠的 15~19 就是在講這個。我認為是沒有必要把兩個行為拆開到兩個執行緒。


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。 https://skilltree.my/

    • 已標示為解答 seanhua 2018年8月10日 上午 10:17
    2018年8月10日 上午 08:19
    版主
  • 感謝!Bill Chung先進的提點,真是一語點醒夢中人,我太執著於用兩個執行緒去做程式撰寫了,

    不過15~19章節中使用的物件導向我還要靜下心來,花個時間好好研究才行,感謝您的解答!

    2018年8月10日 上午 10:17