Exemplo n.º 1
0
        public ThreadPool()
        {
            _taskProc = MyTaskProc;
            GC.KeepAlive(_taskProc);

            _pool = Sdk.ThreadPool.Create_HP_ThreadPool();
            if (_pool == IntPtr.Zero)
            {
                throw new InitializationException("创建线程池对象失败");
            }
        }
Exemplo n.º 2
0
 private void ThreadProc()
 {
     try
     {
         TaskProc?.Invoke();
         Success = true;
     }
     catch (Exception e)
     {
         Error   = e.Message;
         Success = false;
     }
 }
Exemplo n.º 3
0
 public static extern bool HP_ThreadPool_Submit(IntPtr pThreadPool, TaskProc fnTaskProc, IntPtr pvArg, int dwMaxWait /*= INFINITE*/);
Exemplo n.º 4
0
 /// <summary>
 /// 向线程池提交异步任务
 /// </summary>
 /// <param name="fnTaskProc">任务处理函数</param>
 /// <param name="args">任务参数</param>
 /// <param name="maxWait">最大等待时间(毫秒,默认:INFINITE即-1,一直等待)</param>
 /// <returns>TRUE -- 成功,FALSE -- 失败,可通过 SYS_GetLastError() 获取系统错误代码,其中,错误码 #ERROR_DESTINATION_ELEMENT_FULL 表示任务队列已满</returns>
 public bool Submit(TaskProc fnTaskProc, IntPtr args, int maxWait = -1)
 {
     return(ThreadPoolSdk.HP_ThreadPool_Submit(pThreadPool, fnTaskProc, args, maxWait));
 }