参考资料: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
分享到:
相关推荐
这个库在.NET框架中提供了一个替代默认线程池(System.Threading.ThreadPool)的选择,尤其适用于需要更精细控制线程池行为的应用场景。SmartThreadPool具有许多高级特性,比如工作项优先级、自定义线程优先级、线程...
.NET 智能线程池(SmartThreadPool)是一款开源的、可高度定制的线程池实现,用于替代.NET Framework中的System.Threading.ThreadPool。SmartThreadPool由Anders Laub开发,其设计目标是提供更高效、更灵活的线程池...
4. **线程池大小动态调整**:不同于.NET Framework中的线程池,SmartThreadPool允许开发者动态调整线程池的大小,根据应用的实时需求增减线程数量。 5. **详细的监控和统计**:SmartThreadPool提供了丰富的统计信息...
《SmartThreadPool-2.2.1.0:深入理解与应用多线程技术》 SmartThreadPool(STP)是一款开源的、高效的线程池实现,版本2.2.1.0,它为开发者提供了强大的多线程处理能力,是.NET框架下的一个优秀工具。线程池作为一...
QueueUserWorkItem方法是ThreadPool的核心接口之一,它的基本用法如下: ```csharp ThreadPool.QueueUserWorkItem(new WaitCallback(DoSomethingLong), "参数"); ``` 这里的`DoSomethingLong`是需要异步执行的方法...
从给定的文件信息来看,文章深入探讨了Tomcat中的线程池(ThreadPool)机制,这是Tomcat服务器处理HTTP请求的核心部分之一。Tomcat的线程池与Apache的CommonThreadPool不同,它专为Tomcat设计,以高效地管理并分配...
线程池(threadpool)是计算机程序中一种有效的多线程处理形式,它预先创建一组线程,待有任务需要执行时,从线程池中取出一个线程来执行任务,任务完成后,线程并不销毁,而是返回线程池等待下一次的任务分配。...
通过阅读和分析这些代码,开发者可以更好地理解如何在实际项目中应用Boost.Threadpool来处理任务,特别是优先级任务。 总结而言,Boost.Threadpool为C++开发者提供了一种高效、灵活的线程管理工具,允许他们在多...
使用ThreadPool可以提高应用程序的效率和可扩展性,因为它可以减少创建和销毁线程所需的时间,并且可以更好地管理线程池中的线程数量。 五、线程池的缺点 使用ThreadPool也存在一些缺点,例如不能控制线程池中线程...
在本文中,我们将深入探讨`threadpool`的原理、使用方法以及其在多线程编程中的应用。 ### 一、线程池概念 线程池是一种线程使用模式,预先创建一组线程,当有任务需要执行时,从线程池中取出一个线程来执行任务,...
2、为什么不使用.Net默认的线程池.Net默认的线程池(ThreadPool)是一个静态类,所以是没办法自己创建一个新的程序池的。默认的线程池与应用程序域 (AppDomain)挂钩,一个AppDomain只有一个线程池。假如在线程池中执行...
在"threadpool.tar.gz"压缩包中,包含两个文件:threadpool.cc和threadpool.h,它们很可能是实现线程池的源代码文件。这里我们将详细讨论C++11引入的线程库以及如何在Linux/MacOS平台上利用这些新特性构建线程池。 ...
threadPool的实现代码
Tomcat的ThreadPool组件设计之初就考虑到了多个方面,包括线程数量的动态调整、监控和维护线程池的健康状态等。在深入理解Tomcat ThreadPool之前,需要对一些基础概念有所了解。 首先,ThreadPool组件的类图和整体...
ThreadPool 线程池管理单元 带调用例子
标签 "threadpool" 明确指出这个项目与线程池技术有关,这可能是一个教学示例,也可能是一个实际应用的基础组件。 在压缩包的文件名列表中,我们可以看到以下文件: 1. ThreadPoolApp.clw:这是Visual C++的类库...
标题中的"ThreadPool"指的是线程池,这是一个编程概念,特别是在多线程编程中非常关键。线程池是一种线程使用模式,它维护着一个工作线程的集合,用于执行一系列的任务。通过线程池,可以有效地管理和控制并发执行的...
【Python】python threadpool python多线程 Python语言基础 文件清单 └── threadpool-1.2.7 ├── CHANGELOG.txt ├── doc │ ├── api │ │ ├── class-tree.html │ │ ├── epydoc.css │ │...
在C#编程中,线程(Thread)、线程池(ThreadPool)和任务(Task)是并行处理和异步操作的重要组成部分。理解它们的工作原理和使用方法对于优化应用程序的性能至关重要。下面将详细阐述这三个概念及其相关知识点。 ...