日期:2014-05-18  浏览次数:20714 次

多个线程掉用同一个处理函数问题
当多个线程掉用同一个处理函数的时候,他们是分别建立自己的一个内存块呢   还要怎么的:比如代码:T
hread[]   threads=new   Thread[100];
                            threads[i]   =   new   Thread(new   ThreadStart(ThreadProc));
                            threads[i].IsBackground=true;
                            threads[i].Start();   //这里将会有几个线程   都调用了ThreadProc()处理函数;

private   void   ThreadProc()  
{  
if(mySocket.Connected)  
{  
statusBar1.Text= "与客户建立连接. ";  
while(true)  
{  
Byte[]   ByteRecv=new   Byte[256];  
mySocket.Receive(ByteRecv,ByteRecv.Length,0);  
string   strRecv=Encoding.BigEndianUnicode.GetString(ByteRecv);  
rtbReceive.AppendText(strRecv+ "\r\n ");  
}  
}  
}  




------解决方案--------------------
函数内的变量是独立的 但是 函数之外的是共用的.
由其他线程 创建的对象则需要委托方式访问 详情请查看msdn
------解决方案--------------------
啊 原来你的可能不行
mySocket 是外部变量 同一时间会冲突
------解决方案--------------------
lock{

}
避免冲突
------解决方案--------------------

statusBar1.Text= "与客户建立连接. ";
执行的时候肯定出错,要用委托方式

mySocket.Receive(ByteRecv,ByteRecv.Length,0);
rtbReceive.AppendText(strRecv+ "\r\n ");
我没试过,但理论上在运行时应该是有问题的
------解决方案--------------------
每个线程都有自己的堆栈的,而函数里定义的变量是在堆栈里创建的`