`
xjt927
  • 浏览: 27113 次
  • 性别: Icon_minigender_1
  • 来自: 河北邯郸
文章分类
社区版块
存档分类
最新评论

ThreadPool之SmartThreadPool应用

阅读更多
参考资料:http://hi.baidu.com/cdmember_daihw/blog/item/26e40a86d4ed7b3866096e49.html

1: SmartThreadPool介绍:http://www.codeproject.com/KB/threads/smartthreadpool.aspx
2: 下载SmartThreadPool——http://smartthreadpool.codeplex.com/
3:在VS中添加引用:SmartThreadPool.dll,其中dll有几个版本,找到项目对应的DLL。
4:创建socket
    public Socket ListenerClassFromSmartThreadPool()
    {
      //建立socket偵聽連接
      listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
      try
      {
        IPEndPoint locEP = new IPEndPoint(IPAddress.Any, 2000);
        listener.Bind(locEP);
        listener.Listen(100);

        STPStartInfo stp = new STPStartInfo();
        stp.DisposeOfStateObjects = true;
        stp.CallToPostExecute = CallToPostExecute.Always;
        stp.ThreadPriority = ThreadPriority.Highest;
        stp.UseCallerCallContext = true;
        stp.MaxWorkerThreads = 100;
        stp.IdleTimeout = 10;

        SmartThreadPool smart = new SmartThreadPool(stp);
        smart.Start();

        //SmartThreadPool smart = new SmartThreadPool();
        //smart.Start();

        IWorkItemResult result = smart.QueueWorkItem(new WorkItemCallback(this.ClientWorkThreadFromSmartThreadPool), null);

        //SmartThreadPool.WaitAll(new IWorkItemResult[] { result });
        smart.WaitForIdle();
        /* 其中 注意WaitAll 、WaitAny、WaitForIdle之间关系 */

        //Console.WriteLine(result.Result);
        //smart.Shutdown();
        //建立一个线程池
        //ThreadPool.QueueUserWorkItem(new WaitCallback(ClientWorkThread));
      }
      catch (Exception ex)
      {
        help2.logWrite("建立监控出错:" + ex.Message);
      }
      return listener;
    }
5: socket中具体过程,注意:SmartThreadPool要求调用过程返值是object.而.net自带要求不带返回值
    private object ClientWorkThreadFromSmartThreadPool(Object stateInfo)
    {
      ClientWorkThread(null);
      return null;
    }

    //处理连接请求
    private void ClientWorkThread(Object stateInfo)
    {
      byte[] buffer = new byte[8192];

      try
      {
        while (true)
        {
          try
          {
            Socket socket = listener.Accept();
            IPEndPoint remoEP = ((IPEndPoint)socket.RemoteEndPoint);
            string recString = "接收到来自" + remoEP.Address.ToString() + "的连接。";

            //Console.WriteLine(recString);

            int receCount = socket.Receive(buffer);

            if (receCount > 0)
            {
              //string recievestring = Encoding.Default.GetString(buffer, 0, receCount);
              string recievestring = Encoding.GetEncoding("gb2312").GetString(buffer, 0, receCount);

              //recievestring = "sdfsdfs:" + recievestring;
              if (recievestring != "")
              {
                recievestring = GetUserAuth(recievestring);

                //byte[] bytestr = System.Text.Encoding.Unicode.GetBytes(str);
                //byte[] sendbuffer = new byte[8192];

                //sendbuffer = Encoding.ASCII.GetBytes(recievestring);

                byte[] sendbuffer = Encoding.GetEncoding("gb2312").GetBytes(recievestring);

                recString = "来自客户端" + remoEP.Address.ToString() + "的消息:" + recievestring;

                //Console.WriteLine(recString);

                AddListItemHandler addhandle = new AddListItemHandler(AddListItem);
                addhandle.Invoke(recString); //调用窗体来执行委托

                socket.Send(sendbuffer, sendbuffer.Length, SocketFlags.None);
              }
            }
            socket.Shutdown(SocketShutdown.Both);
            socket.Close();
          }
          catch (Exception ex)
          {
            help2.logWrite("接收信息出错_1,循环停摆1分钟:" + ex.Message);
            System.Threading.Thread.Sleep(60000);
          }
        }
      }
      catch (Exception ex)
      {
        help2.logWrite("接收信息出错:" + ex.Message);
      }
    }


转自:http://hillstone.blog.hexun.com/54716371_d.html
分享到:
评论

相关推荐

    C# .net智能线程池 SmartThreadPool

    这个库在.NET框架中提供了一个替代默认线程池(System.Threading.ThreadPool)的选择,尤其适用于需要更精细控制线程池行为的应用场景。SmartThreadPool具有许多高级特性,比如工作项优先级、自定义线程优先级、线程...

    .net 智能线程池 SmartThreadPool

    .NET 智能线程池(SmartThreadPool)是一款开源的、可高度定制的线程池实现,用于替代.NET Framework中的System.Threading.ThreadPool。SmartThreadPool由Anders Laub开发,其设计目标是提供更高效、更灵活的线程池...

    .Net 高性能线程池组件 smartthreadpool

    4. **线程池大小动态调整**:不同于.NET Framework中的线程池,SmartThreadPool允许开发者动态调整线程池的大小,根据应用的实时需求增减线程数量。 5. **详细的监控和统计**:SmartThreadPool提供了丰富的统计信息...

    SmartThreadPool-2.2.1.0

    《SmartThreadPool-2.2.1.0:深入理解与应用多线程技术》 SmartThreadPool(STP)是一款开源的、高效的线程池实现,版本2.2.1.0,它为开发者提供了强大的多线程处理能力,是.NET框架下的一个优秀工具。线程池作为一...

    C#ThreadPool之QueueUserWorkItem使用案例详解.docx

    QueueUserWorkItem方法是ThreadPool的核心接口之一,它的基本用法如下: ```csharp ThreadPool.QueueUserWorkItem(new WaitCallback(DoSomethingLong), "参数"); ``` 这里的`DoSomethingLong`是需要异步执行的方法...

    Tomat研究之ThreadPool

    从给定的文件信息来看,文章深入探讨了Tomcat中的线程池(ThreadPool)机制,这是Tomcat服务器处理HTTP请求的核心部分之一。Tomcat的线程池与Apache的CommonThreadPool不同,它专为Tomcat设计,以高效地管理并分配...

    threadpool

    线程池(threadpool)是计算机程序中一种有效的多线程处理形式,它预先创建一组线程,待有任务需要执行时,从线程池中取出一个线程来执行任务,任务完成后,线程并不销毁,而是返回线程池等待下一次的任务分配。...

    Boost threadpool优先级实例

    通过阅读和分析这些代码,开发者可以更好地理解如何在实际项目中应用Boost.Threadpool来处理任务,特别是优先级任务。 总结而言,Boost.Threadpool为C++开发者提供了一种高效、灵活的线程管理工具,允许他们在多...

    C#多线程ThreadPool线程池详解

    使用ThreadPool可以提高应用程序的效率和可扩展性,因为它可以减少创建和销毁线程所需的时间,并且可以更好地管理线程池中的线程数量。 五、线程池的缺点 使用ThreadPool也存在一些缺点,例如不能控制线程池中线程...

    python threadpool

    在本文中,我们将深入探讨`threadpool`的原理、使用方法以及其在多线程编程中的应用。 ### 一、线程池概念 线程池是一种线程使用模式,预先创建一组线程,当有任务需要执行时,从线程池中取出一个线程来执行任务,...

    .Net开源线程池组件SmartThreadPool.zip

    2、为什么不使用.Net默认的线程池.Net默认的线程池(ThreadPool)是一个静态类,所以是没办法自己创建一个新的程序池的。默认的线程池与应用程序域 (AppDomain)挂钩,一个AppDomain只有一个线程池。假如在线程池中执行...

    threadpool.tar.gz

    在"threadpool.tar.gz"压缩包中,包含两个文件:threadpool.cc和threadpool.h,它们很可能是实现线程池的源代码文件。这里我们将详细讨论C++11引入的线程库以及如何在Linux/MacOS平台上利用这些新特性构建线程池。 ...

    threadPool的实现代码

    threadPool的实现代码

    Tomat组件研究之ThreadPool

    Tomcat的ThreadPool组件设计之初就考虑到了多个方面,包括线程数量的动态调整、监控和维护线程池的健康状态等。在深入理解Tomcat ThreadPool之前,需要对一些基础概念有所了解。 首先,ThreadPool组件的类图和整体...

    ThreadPool 线程池管理单元

    ThreadPool 线程池管理单元 带调用例子

    threadpool_src.zip

    标签 "threadpool" 明确指出这个项目与线程池技术有关,这可能是一个教学示例,也可能是一个实际应用的基础组件。 在压缩包的文件名列表中,我们可以看到以下文件: 1. ThreadPoolApp.clw:这是Visual C++的类库...

    ThreadPool

    标题中的"ThreadPool"指的是线程池,这是一个编程概念,特别是在多线程编程中非常关键。线程池是一种线程使用模式,它维护着一个工作线程的集合,用于执行一系列的任务。通过线程池,可以有效地管理和控制并发执行的...

    Pythonpython threadpool python多线程 Python语言基础

    【Python】python threadpool python多线程 Python语言基础 文件清单 └── threadpool-1.2.7 ├── CHANGELOG.txt ├── doc │ ├── api │ │ ├── class-tree.html │ │ ├── epydoc.css │ │...

    C# Thread、ThreadPool、Task测试

    在C#编程中,线程(Thread)、线程池(ThreadPool)和任务(Task)是并行处理和异步操作的重要组成部分。理解它们的工作原理和使用方法对于优化应用程序的性能至关重要。下面将详细阐述这三个概念及其相关知识点。 ...

Global site tag (gtag.js) - Google Analytics