动态创建多线程的问题

zbking 2009-04-16 12:46:00
public class Work
{
public WorkIOThdClass(short i)
{
this.IOChanel = i;
}

private short IOChanel;

public void Out()
{
work(IOChanel);//这里操作的时间比较长
}
}


for (int j = 0; j < 10; j++)
{

WorkIOHoldThdClass tmp = new WorkIOHoldThdClass(i);
wk = new System.Threading.Thread(tmp.out);
wk.Start();

}

我的问题是在for循环了只做了第1次,其他的都没做。我是想同时开多个线程进行操作。请问改如何?
...全文
135 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
silver0 2009-04-23
  • 打赏
  • 举报
回复
for (int j = 0; j < 10; j++)
{

WorkIOHoldThdClass tmp = new WorkIOHoldThdClass(i); //这里的变量i在哪里定义的?
threads[j] = new System.Threading.Thread(tmp.out);
threads[j].Start();
}



cja03 2009-04-16
  • 打赏
  • 举报
回复
public class WorkIOThdClass
{
public WorkIOThdClass(short i)
{
this.IOChanel = i;
}

private short IOChanel;

public void Out()
{
work(IOChanel);//这里操作的时间比较长
}
}


for (int j = 0; j < 10; j++)
{

WorkIOHoldThdClass tmp = new WorkIOHoldThdClass(i);
new System.Threading.Thread(new ThreadStart(tmp.out)).Start();
}
qldsrx 2009-04-16
  • 打赏
  • 举报
回复
Thread[] threads = new Thread[10];

public class Work
{
public WorkIOThdClass(short i)
{
this.IOChanel = i;
}

private short IOChanel;

public void Out()
{
work(IOChanel);//这里操作的时间比较长
}
}

for (int j = 0; j < 10; j++)
{

WorkIOHoldThdClass tmp = new WorkIOHoldThdClass(i); //这里的变量i在哪里定义的?
threads[j] = new System.Threading.Thread(tmp.out);
threads[j].Start();
}

你创建了多少个线程,就得记录下多少个线程,如果不去捕获线程对象,任其执行,会很麻烦的。
另外要注意全局变量及public对象的操作,如果多个线程共同改写,建议使用回调函数,让主线程去改写,不然会有意想不到的错误发生,锁定就不必了,免得发生死锁。
mqfwjp 2009-04-16
  • 打赏
  • 举报
回复
应该把这些线程对象记录到一个公共的地方,一边可以终止或者消除线程,可以对线程进行管理
CSharpEx 2009-04-16
  • 打赏
  • 举报
回复
for (int j = 0; j < 10; j++)
{

WorkIOHoldThdClass tmp = new WorkIOHoldThdClass(i);
new System.Threading.Thread(new ThreadStart(tmp.out)).Start();
}

这样做会死人的,因为相互之间的线程没有同步机制

itcrazyman 2009-04-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 soaringbird 的回复:]
for (int j = 0; j < 10; j++)
{

WorkIOHoldThdClass tmp = new WorkIOHoldThdClass(j);
wk = new System.Threading.Thread(new ThreadStart(tmp.out));
wk.Start();

}
[/Quote]
up,帮顶
yulien 2009-04-16
  • 打赏
  • 举报
回复
ding
soaringbird 2009-04-16
  • 打赏
  • 举报
回复
for (int j = 0; j < 10; j++)
{

WorkIOHoldThdClass tmp = new WorkIOHoldThdClass(j);
wk = new System.Threading.Thread(new ThreadStart(tmp.out));
wk.Start();

}

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧