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

关于.NET多线程嵌套的管理问题
多线程,没什么经验,请大家多指教。

问题描述如下:

一个WINFORM的应用,在主程序启动后, 会启动N个子线程,形如:

static void main(){ 

Thread t1 = new Thread (new ThreadStart(Entity1.doWork));

Thread t2 = new Thread (new ThreadStart(Entity2.doWork));

......

Thread tN = new Thread (new ThreadStart(EntityN.doWork));

}

,然后呢,每个 EntityX.doWork 的逻辑中, 又启动了N个子线程,形如:

public class EntityX{

  public static void doWork(){ 

  Thread t1 = new Thread (new ThreadStart(Sample1.go));

  Thread t2 = new Thread (new ThreadStart(Sample2.go));

  ......

  Thread tN = new Thread (new ThreadStart(SampleN.go));

  }

}

 

现在的问题是: 需要在主程序中,对所有的子线程(子的子)进行生命周期的管理,请教各位有没有好的方案,我自己目前的实现思路是用 timer + thread 数组的轮询方式来做,不过感觉不是很好,希望大家不吝赐教。

针对我要实现的模式, 如果哪位有更好的实现逻辑,也请不吝赐教,先谢谢。



------解决方案--------------------
为什么有在线程里又起线程呢
------解决方案--------------------
不会。
------解决方案--------------------
其实你开这这么多线程性能不会比开2到4个线程高
------解决方案--------------------
那可以这样用4个线程来处理数据库操作,用4个线程管理逻辑
------解决方案--------------------
我有一个疑问数据库crud操作需要使用线程进行控制吗,不过那个逻辑连接使用不就行了
------解决方案--------------------
个人觉得楼上的比较科学。

主逻辑监听线程:mlistener 
子逻辑监听线程; slistener 
数据库查询工作相称: dbworker 

mlistener得到要执行的主逻辑然后通知dbworker查询。在dbworker查询的时候,mlistener继续监听对主逻辑的请求 

dbworker的到查询结后通知slistener来处理相应的子逻辑,slistener通知dbworker进行查询。slistener继续坚挺对子逻辑的请求。dbworker得到查询结构后继续操作 

我这个有点像对tcpserver的操作。这种方法比用线程池的方法效率高
------解决方案--------------------
学习
------解决方案--------------------
具体逻辑不知
不过感觉后面的可以线程池做
------解决方案--------------------
探讨
实际上,每个逻辑,都涉及到数据库操作,是为了充分利用数据库的并发连接数,所以才有此想法的

------解决方案--------------------
用委托应该可以,当线程内部有主程序感兴趣的事件发生时,通过委托,通知主程序。变主动为被动模式,这样处理起来简单些。
------解决方案--------------------
探讨
逻辑和数据库操作是溶于一体的。

子逻辑需要父逻辑的执行结果来作为前提条件,也就是作为参数传入的(我的多线程是带启动参数的,是 ParameterizedThreadStart 模式)

------解决方案--------------------
http://blog.csdn.net/greystar/archive/2007/08/31/1766363.aspx
建议使用这个来实现
------解决方案--------------------
帮顶个吧
------解决方案--------------------
最好不使用轮询的方式,可以用事件,当线程结束或其他动作,发一个事件通知父线程,父线程就可以处理相关动作,不需要轮询操作的。
------解决方案--------------------
学习!
------解决方案--------------------
探讨
http://blog.csdn.net/greystar/archive/2007/08/31/1766363.aspx
建议使用这个来实现

------解决方案--------------------
我看给每一个线程都搞上一个事件(比如一个条件触发,时间触发),自己管理自己就不会乱了吗?主线程在搞上一个判断句就行了,应该是这样的?
------解决方案--------------------
路过学习
------解决方案--------------------