读书人

多个线程掉用同一个处理函数有关问题

发布时间: 2012-02-27 10:00:22 作者: rapoo

多个线程掉用同一个处理函数问题
当多个线程掉用同一个处理函数的时候,他们是分别建立自己的一个内存块呢 还要怎么的:比如代码: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 ");
我没试过,但理论上在运行时应该是有问题的
[解决办法]
每个线程都有自己的堆栈的,而函数里定义的变量是在堆栈里创建的`

读书人网 >C#

热点推荐