问个线程生命周期的问题
C# code
private void Form_Load(object sender, EventArgs e)
{
Thread thread = new Thread(Open);
//thread.IsBackground = true;后台线程的作用是什么?有什么区别
thread.Start();
}
private void Open()
{
//DoSomeThings;
//DoSomeThings;
//DoSomeThings;
}
想请问一下:
1.这个线程的生命周期到open方法执行完就自动死亡了吗?还是要使用abort来结束?
2.这个线程是全局的,声明到外面去,有个定时器,每隔一段时间就new Thread(Open)然后Start(),在保证open方法能执行完之后才会new Thread,会不会导致有很多线程还是说始终只有一个线程?
3.IsBackground的作用是什么?有什么区别?
谢谢大家!
------解决方案--------------------1.这个线程的生命周期到open方法执行完就自动死亡了吗?还是要使用abort来结束?
执行完 Open() 函数自动结束
2.这个线程是全局的,声明到外面去,有个定时器,每隔一段时间就new Thread(Open)然后Start(),在保证open方法能执行完之后才会new Thread,会不会导致有很多线程还是说始终只有一个线程?
启动一次就会增加一个新的线程(同时,之前的线程执行完毕会自动销毁)
3.IsBackground的作用是什么?有什么区别?
同问
------解决方案--------------------IsBackground 估计会影响线程的优先级。设为true优先级会更低一些。
纯猜测
------解决方案--------------------IsBackground标明是否是后台线程。
具体见MSDN。
程序关闭的时候会等待所以前台线程结束,前台线程都结束之后会自动关闭后台线程。
------解决方案--------------------1.这个线程的生命周期到open方法执行完就自动死亡了吗?还是要使用abort来结束?
并不是open方法执行完就自动死亡,而是open方法执行完这个线程就没事了,至于什么时候死亡这个在你不干预的时候是自动决定的,并不是马上死亡。
------解决方案--------------------什么叫尽快结束?那就是外界强制终止呗。abort出异常是对的,本来这个操作就应该出异常。
------解决方案--------------------正确的方法不是强制结束线程,而是在线程内加入消息处理,接受到某特定消息则中断循环等等然后自我退出
想让它结束,发个消息就行了
------解决方案--------------------这些问题不错啊,mark下,个人见解
1,据说不会自动销毁,而是在线程池中挂起,当线程池满的时候,才会销毁
2,如果要保证资源同时只有一个线程访问,用lock吧
3,IsBackgroud表示是否后台进程,true的话会线程随着宿主的销毁而销毁,反之会影响程序结束
------解决方案--------------------顶
------解决方案--------------------http://technet.microsoft.com/zh-cn/library/system.threading.thread.isbackground(v=VS.95)