有一个多线程应用,用户接入,则开一个线程处理,在用户开线程的过程中,可以设置线程名,问题是,服务器端如何关闭指定名称的线程?问题2:在服务器端的程序中,假设为某个接入用户开启的线程名是newthread.Name = "aaaaaaa";        //线程名
我在另一个程序中,对服务器进行线程查询,确不能得到线程名!代码如下:
   Process[] allproc = Process.GetProcesses();  //得到系统进程信息
            foreach (Process proc in allproc)
            {
                if (proc.ProcessName.ToLower().CompareTo(sss) == 0)
                {
                    ProcessThreadCollection mythreads = proc.Threads;
                    foreach (ProcessThread pt in mythreads)
                    {
                        
                        ThreadState ts = pt.ThreadState;
                        listBox1.Items.Add("线程ID:"+pt.Id.ToString());
                        listBox1.Items.Add("线程状态:"+ts.ToString());
                        listBox1.Items.Add("      ");
                    }
                }
            }
在pt中,没有线程名的属性,有线程ID,但是我不能得到线程ID和线程名的对应关系,所以我不能关闭线程
如何得到他们的对应关系?
我现在要实现的功能是:如果某个用户长时间不与服务器交互,服务器要踢他下线,问题是不不知道服务器端的N个线程哪个与之对应,无法关闭线程,我必须要得到线程名与用户的对应关系,之后,关闭指定名称的线程!!!!

解决方案 »

  1.   

    开启一个线程后 将对应的线程名称和ID存到一个哈希表里 获取ID后 查一下就知道是什么名了
      

  2.   

    有一个多线程应用,用户接入,则开一个线程处理,在用户开线程的过程中,可以设置线程名,问题是,服务器端如何关闭指定名称的线程? 
    在dotNET中不建议如windows api中那样粗暴地关闭某个线程,一般是让线程自己终止,这样安全,资源清理等等都
    很干净,做法是设置一个标志位,当需要终止的时候,主线程修改标志,而子线程在运行中会不断轮询这个标志位,当检测到的时候,自己关闭自己