有一个多线程应用,用户接入,则开一个线程处理,在用户开线程的过程中,可以设置线程名,问题是,服务器端如何关闭指定名称的线程?问题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个线程哪个与之对应,无法关闭线程,我必须要得到线程名与用户的对应关系,之后,关闭指定名称的线程!!!!
我在另一个程序中,对服务器进行线程查询,确不能得到线程名!代码如下:
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个线程哪个与之对应,无法关闭线程,我必须要得到线程名与用户的对应关系,之后,关闭指定名称的线程!!!!
在dotNET中不建议如windows api中那样粗暴地关闭某个线程,一般是让线程自己终止,这样安全,资源清理等等都
很干净,做法是设置一个标志位,当需要终止的时候,主线程修改标志,而子线程在运行中会不断轮询这个标志位,当检测到的时候,自己关闭自己