HP-Socket v5.4.x版本开始,提供线程池组件IHPThreadPool,协助用户实现通信逻辑与业务逻辑分离,提高应用程序的整体执行效率。IHPThreadPool提供以下主要操作方法。这些方法成功返回TRUE,失败返回FALSE,失败可通过SYS_GetLastError() 获取系统错误代码。
**启动线程池**
~~~
BOOL Start(dwThreadCount = 0, dwMaxQueueSize = 0, enRejectedPolicy = TRP_CALL_FAIL, dwStackSize = 0)
dwThreadCount 线程数量,(默认:0)
>0 :dwThreadCount
=0 :(CPU核数 * 2 + 2)
<0 :(CPU核数 * (-dwThreadCount))
dwMaxQueueSize 任务队列最大容量(默认:0,不限制)
enRejectedPolicy 任务拒绝处理策略
TRP_CALL_FAIL :(默认)立刻返回失败
TRP_WAIT_FOR :等待(直到成功、超时或线程池关闭等原因导致失败)
TRP_CALLER_RUN :调用者线程直接执行
dwStackSize 线程堆栈空间大小(默认:0 -> 操作系统默认)
~~~
**关闭线程池**
* * * * *
> 在规定时间内关闭线程池组件,如果工作线程在最大等待时间内未能正常关闭,会尝试强制关闭,这种情况下很可能会造成系统资源泄漏。
~~~
BOOL Stop(dwMaxWait = INFINITE)
dwMaxWait 最大等待时间(毫秒,默认:INFINITE,一直等待)
~~~
**提交任务**
~~~
BOOL Sbumit(fnTaskProc, pvArg, dwMaxWait = INFINITE)
fnTaskProc 任务处理函数
pvArg 任务参数
dwMaxWait 任务提交最大等待时间(仅对TRP_WAIT_FOR类型线程池生效,默认:INFINITE,一直等待)。
** SYS_GetLastError() 错误码ERROR_DESTINATION_ELEMENT_FULL表示任务队列已满。
~~~
**提交Socket任务**
~~~
BOOL Sbumit(pTask, dwMaxWait = INFINITE)
pTask 任务参数
dwMaxWait 任务提交最大等待时间(仅对TRP_WAIT_FOR类型线程池生效,默认:INFINITE,一直等待)
** SYS_GetLastError() 错误码ERROR_DESTINATION_ELEMENT_FULL表示任务队列已满。
~~~
**动态调整线程池大小**
~~~
BOOL AdjustThreadCount(dwNewThreadCount)
dwNewThreadCount 线程数量
>0 :dwNewThreadCount
=0 :(CPU核数 * 2 + 2)
<0 :(CPU核数 * (-dwNewThreadCount))
~~~
