首页 新闻 会员 周边 捐助

关于强制结束线程

0
[已解决问题] 解决于 2018-05-20 16:53

我有一个服务端,n个客户端,  他们之间用socket 通信; 服务端创建socket 监听, 每一个客户端连接进来,都会生成一个新的socket,并启动一个新线程,把新的socket 传入新线程中去执行,新线程中是死循环;

现在,我想在线程外关闭某个指定的线程,该如何操作, 每个新线程创建的时候,并不知道这个线程对应的是哪台设备

百鸟朝凤的主页 百鸟朝凤 | 菜鸟二级 | 园豆:260
提问于:2018-04-09 22:47
< >
分享
最佳答案
1

通常情况,如果我们需要一个线程执行一个可控的死循环,那么通常的做法是将你的这个线程方法封装,然后采用信号量的方式来控制

 示例代码如下

 1 using System;
 2 using System.Threading;
 3 using System.Threading.Tasks;
 4 
 5 namespace Test
 6 {
 7     class Program
 8     {
 9         static void Main(string[] args)
10         {
11 
12             var thread = new MyThread();
13            
14             Console.ReadKey();
15             thread.StopAsync();
16             Console.ReadKey();
17 
18         }
19 
20     }
21 
22     public class MyThread
23     {
24         private bool signal = true;
25 
26         public MyThread()
27         {
28             Task.Factory.StartNew(Runner);
29         }
30 
31         public void StopAsync() {
32             signal = false;
33         }
34 
35         private void Runner()
36         {
37             while (signal)
38             {
39                 Console.WriteLine(DateTime.Now);
40                 //do something.....
41                 Thread.Sleep(1000);
42             }
43             Console.WriteLine("Task finish");
44         }
45     }
46 }

 

C#的线程中有一个比较特殊的用法Thread.Abort方法(Object)

这个方法可以在线程内部抛出一个异常,以强制终止线程执行,但是这种方法不推荐大范围使用

 1 using System;
 2 using System.Threading;
 3 using System.Threading.Tasks;
 4 
 5 namespace Test
 6 {
 7     class Program
 8     {
 9         static void Main(string[] args)
10         {
11             var thread = new Thread(Runner);
12             thread.Start();
13             Console.ReadKey();
14             thread.Abort();
15             Console.ReadKey();
16         }
17 
18         static ThreadStart Runner = delegate ()
19         {
20             while (true) {
21                 Console.WriteLine(DateTime.Now);
22                 Thread.Sleep(1000);
23             }
24         };
25     }
26     
27 }
奖励园豆:5
写代码的相声演员 | 小虾三级 |园豆:517 | 2018-04-10 09:30
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册