“一个服务,开了三个线程”这个说法本身通常将体现了,没有了解比较好的并发多线程编程时的程序驱动设计机制,因此顶层设计就是虚幻的不落地的。 一个服务运行时,即可能一个线程都没开,也可能某个瞬间有200个线程在运行。“开了多少线程”这根本就是不定的。如果什么业务逻辑都不说但是只说“开了3个线程”这就等于是为了技术而技术了,线程概念反而是麻烦的根源。
弱问下 新开线程方法执行到最后一句是否就自动结束了呢 比如.一个服务,开了三个线程,不知道什么时候会结束,代码执行到最后一句是否就结束了?
@sp1234 例子代码,倒不是说计算多久,有可能计算没完先关闭窗体了,就是这种情况,你说的 if 判断来安全退出,if 代码怎么写呢?
if(closedFlag) return;
[quote=引用 19 楼 u010165006 的回复:] @sp1234 在窗体关闭之后,子线程照样可以访问窗体上的控件 —————— 这个是为什么?窗体关闭以后,主线程结束,子线程不是也被清理了吗?
[quote=引用 18 楼 mirror030 的回复:] 之前做过一个支付程序.服务开了一个监听端口.服务自身是一个主线程.每个客户机请求过来时会给它开一个线程处理,但最多只开三个线程.如果同时有三个线程处理中,没有结束.那么新进来的请求就等待了.当时是这样设计的.但当时也没有想到办法,如果知道线程执行完子,于是就设了一个静态变量.放在线程方法的最后设为TRUE..至今也没别白,如此正确的结束在主线程中开起的线程.
@mirror030 是不是线程代码执行完毕,线程就自动结束了? 如果myThread执行结束,是IsAlive变了,还是myThread变为null了?
@sp1234 在窗体关闭之后,子线程照样可以访问窗体上的控件 —————— 这个是为什么?窗体关闭以后,主线程结束,子线程不是也被清理了吗?
之前做过一个支付程序.服务开了一个监听端口.服务自身是一个主线程.每个客户机请求过来时会给它开一个线程处理,但最多只开三个线程.如果同时有三个线程处理中,没有结束.那么新进来的请求就等待了.当时是这样设计的.但当时也没有想到办法,如果知道线程执行完子,于是就设了一个静态变量.放在线程方法的最后设为TRUE..至今也没别白,如此正确的结束在主线程中开起的线程.
@duanzi_peng @summergo123321 @hanjun0612 @xian_wwq @stevenjin 谢谢大家,有点明白了,那如果关闭程序的时候,创建的myThread 线程可能没有计算完毕,怎么写代码手动结束它呢,写在哪个窗体事件里比较合适呢? 有讲到多线程章节的书,有没有一本书的例子跟窗体有关的,比较完善的,推荐一下有吗?
110,536
社区成员
642,576
社区内容
加载中
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧