当前位置:  开发笔记 > 编程语言 > 正文

如何从一组线程中杀死一个特定的线程

如何解决《如何从一组线程中杀死一个特定的线程》经验,为你挑选了1个好方法。

我正在根据数据库中的记录数创建一个线程数组.然后每个线程轮询一个ipaddress,然后休眠一段时间,然后再次重新加载.我会定期检查数据库中主机数量的任何变化.如果有更多的主机我开始另一个线程.如果主机较少,我需要杀死监视该主机的特定线程.我如何杀死特定的线程.

enter code here protected static void GetThreads()
    {
        Thread[] threads;
        do
        {
            dt = getIP_Poll_status();
            threads = new Thread[dt.Rows.Count];
            Console.WriteLine(dt.Rows.Count + " Threads");
            for (int i = 0; i < threads.Length; ++i)
            {
                string ip = dt.Rows[i][0].ToString();
                int sleep = Convert.ToInt32(dt.Rows[i][1].ToString());
                string status = dt.Rows[i][2].ToString();
                string host = dt.Rows[i][3].ToString();
                Hosts.Add(host);
                string port = dt.Rows[i][4].ToString();
                //Console.WriteLine("starting on " + ip + " delay  " + sleep+".current status "+status);
                threads[i] = new Thread(PollingThreadStart);
                threads[i].Start(new MyThreadParameters(ip, sleep, status, host, port));
                threads[i].Name = host;

            }
            Thread.Sleep(50000);
        }

        while (true);
    }

Jon Skeet.. 7

强行杀死线程是一个坏主意.它可以使系统处于不确定状态.

您应该设置一个标志(以线程安全的方式),以便线程在下次检查时适当地自行终止.有关更多详细信息和示例代码,请参阅我的线程文章.

我想补充Sleep一点,顺便说一下,使用几乎总是错误的做法.你应该使用一些允许优雅唤醒的东西,比如Monitor.Wait.这种方式当有变化时(例如,轮询线程应该死掉),如果它正在等待,某些东西可以将线程唤醒,并且它可以立即注意到该变化.



1> Jon Skeet..:

强行杀死线程是一个坏主意.它可以使系统处于不确定状态.

您应该设置一个标志(以线程安全的方式),以便线程在下次检查时适当地自行终止.有关更多详细信息和示例代码,请参阅我的线程文章.

我想补充Sleep一点,顺便说一下,使用几乎总是错误的做法.你应该使用一些允许优雅唤醒的东西,比如Monitor.Wait.这种方式当有变化时(例如,轮询线程应该死掉),如果它正在等待,某些东西可以将线程唤醒,并且它可以立即注意到该变化.

推荐阅读
mobiledu2402851203
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有