说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

绝对难度,绝对挑战,绝对挑战。关于如何控制线程的个数?先送100分,可以在加

编辑:说三道四文库 发布时间:2018-04-22 03:07
HTML文档下载 WORD文档下载 PDF文档下载
ServerThread=new Thread(new ThreadStart(server.startthread)      ServerThread.Priority=ThreadPriority.Normal;
ServerThread.Start();
我的程序是每当有拥护连接的时候,就启动一个进程,但为了节约服务器资源,如何控制线程启动的最大个数。比如超过100的时候,则通知用户,系统正忙。谢谢,
static int ThreadCount=0;
...
if (ThreadCount<=100)
{
ServerThread=new Thread(new ThreadStart(server.startthread);
ServerThread.Priority=ThreadPriority.Normal;
ServerThread.Start();
ThreadCount++;
}
else
     {...}
if(Proccess.GetCurrentProcess().Threads.Count()<=101){
//.....start
}else{
//.....busy
}


----------------------
你的好多贴应该结一下了吧!
一定一定。但还有一个问题,就是,if(Proccess.GetCurrentProcess().Threads.Count()<=101){
你取的是所有的进程,我只是想是执行特定代码的进程server.startthread
那该怎么办呢,还有,上面的第一个人写的对吗,可以吗谢谢,马上就给分
对了我的前面有一个还想问你就是http://www.csdn.net/Expert/TopicView1.asp?id=717421
上面那个人写的不完全对,用那种方法你需要在线程终止的时候加上ThreadCount--;否则你的程序就不能接受第102个联结了。即使实际只有一个线程运行。
------------------------------
我是一只小小鸟
欢迎交流!尽管问我吧,我会帮你解决的!
尽快结帖哦!我是CSDN的菜鸟,我想获得一颗星!支持我吧!
MSN&Mail: ColinFly@hotmail.com
这个问题,对我来说也头痛。

上面的解决方法还是存在很多其他的问题,见http://www.csdn.net/Expert/TopicView1.asp?id=717534,现在仍然没有解决。
public class server
{   
    private static TcpListener t = new TcpListener(7);
    public  System.Threading.Thread  ServerThread;
    private static bool done=false;
    static int ThreadCount=0;
    public static void Main()
    {  
       try
        {
             t.Start();
             Console.WriteLine("Waiting for a connection...");//我想在这里控制线程的个数,但可能有错误,不知如何
     if(ThreadCount<=0)
              {
        server server1=new server();
        server1.ServerThread=new Thread(new ThreadStart(server1.startthread));
        server1.ServerThread.Priority=ThreadPriority.Normal;
        server1.ServerThread.Start();
        ThreadCount++;
        Console.WriteLine(ThreadCount.ToString());
     }      
     else
      {
                 Console.WriteLine("system is busying");
              }      
           }
       catch(Exception ex)
           { 
             Console.WriteLine("Can't Start Server"+ex.ToString());
             return;
           }
     }
     void startthread()
     {
       while (!done) 
       {
           try
   {
              TcpClient s = t.AcceptTcpClient();       
              NetworkStream stream=s.GetStream();       
           
              byte[] bytes = new byte[2048];
              int bytesRead = stream.Read(bytes, 0, bytes.Length);
              string xmlfile = Encoding.ASCII.GetString(bytes,0,bytesRead); 
              stream.Flush();  
                   
      string name= server.checkxml(xmlfile);
              string returnmessage="hello I have get you message"+name;
              bytes= Encoding.ASCII.GetBytes(returnmessage);
              stream.Write(bytes, 0, bytes.Length);
              stream.Flush();                                   
      stream.Close();
      s.Close();
          }
          catch (Exception e) 
          {   
              Console.WriteLine(e.ToString());
      done=true;               
          } 
       }
     } 
     public static string checkxml(string xmlstream)
     {
try
 {
             XmlDocument xmldoc = new XmlDocument();
             xmldoc.LoadXml(xmlstream);
             XmlNode root = xmldoc.DocumentElement;
             
             string funname=xmldoc.SelectSingleNode(@"REQUEST/FUNCTION").Attributes["name"].Value.ToString();             
             root=root.ChildNodes[0];      
             string progid=root.FirstChild.InnerText.ToString();
             Console.WriteLine(progid+funname);
             return funname;
  }
 catch (Exception e) 
          {   
             Console.WriteLine(e.ToString());
             return "error";
          }         
      }   
}
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘