none
Thread&ManualResetEvent RRS feed

  • 問題

  • 我有多個執行緒,會存取同樣的Dll 所以希望不同執行緒 存取dll是會排隊的

    程序總是在ThreadRead 而當某些條件發生後會觸發Send

    想請問下列程式碼邏輯有沒有錯誤,因為存取時候偶爾會失敗,想了解是我程式邏輯問題或是dll問題?

            ManualResetEvent recvDone = new ManualResetEvent(false);
            ManualResetEvent sendDone = new ManualResetEvent(false);
            bool SendType = false;
    
     private void ThreadRead(object ocj)
            {
                while (thStartType)
                {
    
                   /*執行dll區段
                    TextBoxText("recv" + DateTime.Now.ToString("HH:mm:ss"));
    
    
                   */
    
                    Thread.Sleep(100);
                    sendDone.Set();
                    if (SendType)
                        recvDone.WaitOne();
                }
            }
     private void Send(object ocj)
            {
                SendType = true;
                sendDone.WaitOne();
    
                      /*執行dll區段
                     TextBoxText("recv" + DateTime.Now.ToString("HH:mm:ss"));
                     TextBoxText("send");
    
                     */
              
    
                SendType = false;
                Thread.Sleep(100);
                recvDone.Set();
            }



    2018年6月12日 上午 04:08

解答

  • 你的需求應該用 lock 就可以達成了吧?

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

    • 已標示為解答 StuBoo 2018年6月14日 上午 02:03
    2018年6月13日 上午 04:01
    版主