Maxbad`Blog

hpSocket线程池

2020-12-10 · 2 min read

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))