日期:2014-05-17  浏览次数:21235 次

变量初始化问题
在一个监控程序中,需要对多个监控对象进行初始化,每个对象初始化的时间较长,用循环的话需要等很长时间,我想同时对这些被监控的对象进行初始化,应该怎么办?如果用多线程的话应该怎么做,被监控对象的数量很多,有30个左右。求助大家,这种情况下是怎么处理的。
c#?多线程

------解决方案--------------------
将对象初始化的任务放入Task中异步执行。

http://bbs.csdn.net/topics/390323957
------解决方案--------------------
你可以试试这样,或许会有更好的办法
                private void Form1_Load(object sender, EventArgs e)
         {
for(int i;i<30;i++)
{
Thread t = new Thread(new ThreadStart(Start));
                 t.IsBackground = true;
t.Name=i.ToString();
                 t.Start();
}
}

private void Start()
         {
//判断是哪个线程
                 int tid =Convert.ToInt32(Thread.CurrentThread.Name);
变量初始化;
         } 
------解决方案--------------------
多线程未必能解决问题,如果你的每个检控对象共享某些数据,初始化如果不做互斥就会出错,做互斥有时候很麻烦,

如果各个监控对象互不相干,可以完全独立的初始化,可以用多线程,但线程数目应该和你的cpu核心数相同或者少一,
------解决方案--------------------
如果是CPU计算型的,根据CPU核心数量确定线程数,否则根据任务数量确定线程数(30个线程没什么问题)。
试试支持.NET2.0的fastCSharp
            fastCSharp.threading.task task = new fastCSharp.threading.task(fastCSharp.pub.CpuCount);
            task.Add(...);
            ...
            task.Dispose(false);//true表示等待线程结束