|
hpsocket线程池事件HP在5.8.7版本中增加了线程池回调事件,
启动线程池
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 Submit(fnTaskProc, pvArg, dwMaxWait = INFINITE)
✓ fnTaskProc 任务处理函数
✓ pvArg 任务参数
✓ dwMaxWait 任务提交最大等待时间(毫秒,仅对 TRP_WAIT_FOR 类型线程池生效,默认:INFINITE,一直等待)。
** SYS_GetLastError() 错误码 ERROR_DESTINATION_ELEMENT_FULL 表示任务队列已满。
提交 Socket 任务
BOOL Submit(pTask, dwMaxWait = INFINITE)
✓ pTask 任务参数
✓ dwMaxWait 任务提交最大等待时间(毫秒,仅对 TRP_WAIT_FOR 类型线程池生效,默认:INFINITE,一直等待)
** SYS_GetLastError() 错误码 ERROR_DESTINATION_ELEMENT_FULL 表示任务队列已满。
注意:pTask 由 HP_Create_SocketTaskObj( )函数创建,当 Submit(pTask)提交成功时线程池负责自动销毁 pTask 对象;
当提交失败时应用程序需要手工调用 HP_Destroy_SocketTaskObj( )销毁 pTask 对象。
动态调整线程池大小
BOOL AdjustThreadCount(dwNewThreadCount)
✓ dwNewThreadCount 线程数量
>0 :dwNewThreadCount
=0 :(CPU 核数 * 2 + 2)
<0 :(CPU 核数 * (-dwNewThreadCount))
6.2 监听器事件
HP-Socket v5.8.5 版本开始,提供了线程池监听器接口 IHPThreadPoolListener,线程池组件可以绑定监听器处理以下生命周期事件:
线程池启动事件
void OnStartup(pThreadPool)
✓ pThredPool -- 事件源对象
线程池关闭事件
void OnShutdown(pThreadPool)
✓ pThreadPool -- 事件源对象
工作线程启动事件(每个工作线程触发一次)
void OnWorkerThreadStart(pThreadPool, dwThreadID)
✓ pThreadPool -- 事件源对象
✓ dwThreadID -- 工作线程 ID
工作线程退出事件(每个工作线程触发一次)
void OnWorkerThreadEnd(pThreadPool, dwThreadID)
✓ pThreadPool -- 事件源对象
✓ dwThreadID -- 工作线程 ID
|
|