作者Gayarou (信竹)
看板C_Sharp
标题[问题] Thread中的物件变数问题
时间Thu May 7 16:57:15 2009
再次打扰各位先进了。
刚刚在测试之前写的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
1F:推 ilovebbs:这样写thread不是只存在於此while里面吗? 05/08 07:52
2F:→ Gayarou:花了不少时间找到问题了 这边的Thread部份其实没有问题 05/08 13:13
3F:→ Gayarou:这边的while(true)指的是Server在Live的状况时 05/08 13:13
4F:→ Gayarou:所以在程式结束前Thread都还会存在(用debug工具确定过了) 05/08 13:14
5F:推 ilovebbs:这样跟C++是不是不太一样啊?变数的生存范围 05/09 22:14