admin 发表于 2022-3-30 11:07:12

线程池事件

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


页: [1]
查看完整版本: 线程池事件