[問題] Thread中的物件變數問題

看板C_Sharp作者 (信竹)時間16年前 (2009/05/07 16:57), 編輯推噓2(203)
留言5則, 2人參與, 最新討論串1/1
再次打擾各位先進了。 剛剛在測試之前寫的MultiThread Server時遇到了變數數值上的問題, 在這邊跟各位請教一下.. 我的Server開啟之後,TCPListener會不斷的等待連線, 而當有連線進來時,Server會先New一個"連線處理物件"後, 再New一個Thread將這個"連線處理物件"丟進去。 這部份大概的程式碼如下: ... while (true) { while (!mServer.Pending()) //TcpListener mServer { Thread.Sleep(1000); } connObject cObj = new connObject(); //建立新的連線處理物件 cObj.threadListener = mServer; Thread newThread = new Thread (new ThreadStart(cObj.ServerThreadProc)); newThread.Start(); } 當有連線進來時,應該是確實有Thread被建立的。 而我一直以為New出來並丟進Thread的"連線處理物件"是各自分開的。 但是剛剛在測試兩個Client同時連線並動作時發現, 應該是B的"連線處理物件"中的變數數值竟然是 A的"連線處理物件中"的變數數值。 這代表了A跟B同時改變變數時,其實改變到的是同一個變數, 而非各自的連線所建立的"連線處理物件"中的變數.. 不知道有沒有熟悉這部份的先進能夠指點一下, 是我指定的方式有誤? 還是這樣建立Thread的方式有問題呢? 謝謝各位 >"<|| -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 120.125.83.70

05/08 07:52, , 1F
這樣寫thread不是只存在於此while裡面嗎?
05/08 07:52, 1F

05/08 13:13, , 2F
花了不少時間找到問題了 這邊的Thread部份其實沒有問題
05/08 13:13, 2F

05/08 13:13, , 3F
這邊的while(true)指的是Server在Live的狀況時
05/08 13:13, 3F

05/08 13:14, , 4F
所以在程式結束前Thread都還會存在(用debug工具確定過了)
05/08 13:14, 4F

05/09 22:14, , 5F
這樣跟C++是不是不太一樣啊?變數的生存範圍
05/09 22:14, 5F
文章代碼(AID): #1A0g9ig2 (C_Sharp)