[DIOCP3-IocpTask表达书]基于IOCP引擎的四线程任务的投递和回调解和管理理单元

procedure PostATask(pvTaskWork:TOnTaskWork;       pvTaskData:Pointer = nil;       pvRunInMainThread:Boolean = False;       pvRunType:TRunInMainThreadType = rtSync);overload;

destructor TfrmMain.Destroy;begin  FLogTask.PostATask(onLogMsg, 'abcd', True, rtPostMessage);  Sleep(100);  FLogTask.Active := false;  FLogTask.Free;  inherited Destroy;end;

http://www.bkjia.com/Delphijc/874965.htmlwww.bkjia.comtruehttp://www.bkjia.com/Delphijc/874965.htmlTechArticle\[DIOCP3-IocpTask说明书\]基于IOCP引擎的多线程任务的投递和回调处理单元,iocp模型
【表明】 IocpTask是依据Iocp引擎的八线程任务投递和管理单元…

manbetx手机网页版,IocpTask是依附Iocp引擎的八线程义务投递和管理单元,能够一本万利的把任务拓宽投递到IOCP线程进行合併调节和拍卖,是模仿QDAC-QWorker的管理形式,帮助D7以上的本子。

[DIOCP3-IocpTask说明书]根据IOCP引擎的十二线程任务的投递和回调解和处理理单元,iocp模型

【说明】

IocpTask是依赖Iocp引擎的三十二线程职责投递和管理单元,能够一本万利的把任务张开投递到IOCP线程举办合併调解和管理,是效仿QDAC-QWorker的管理方式,扶助D7以上的版本。

【使用办法】

应用上很简短,下边解释一种比较完善的点子:

procedure PostATask(pvTaskWork:TOnTaskWork;
       pvTaskData:Pointer = nil;
       pvRunInMainThread:Boolean = False;
       pvRunType:TRunInMainThreadType = rtSync);overload;

 

参数:

   pvTaskWork 

       回调函数,procedure(pvTaskRequest: TIocpTaskRequest) of object; 
pvTaskRequest能够访谈到传播的taskData,strData等新闻。

  pvTaskData

     
是流传的数量,为指针类型,能够是其余的数目,在回调函数中得以经过pvTaskRequest对象开展获取获得。

pvRunInMainThread:

     
回调函数是不是在主线程中运作,思量到有的亟需拜见主线程界面包车型客车职分,需求在主线程中运作。

pvRunType:

    
同步的法子,协助二种,一种是rtSync是选拔线程的一道情势,rtPostMessage,使用音讯+
伊夫nt等待的情势。消息格局思量到dll中一道方法无法运用时方可选拔的一路方式。

 

【注意事项】

    
主窗体销毁时,非常多资源都早就被灭绝,即使此时有投递必要主线程处理的天职,大概会产生主线程挂起,而整整过程不能够收场的处境。

 

destructor TfrmMain.Destroy;
begin
  FLogTask.PostATask(onLogMsg, 'abcd', True, rtPostMessage);
  Sleep(100);
  FLogTask.Active := false;
  FLogTask.Free;
  inherited Destroy;
end;

上面的代码会招致程序无法退出,FLogTask.PostATask(onLogMsg, ‘abcd’, True,
rtPostMessage);
是投递到主线程执行的天职,那个时候主窗体正在销毁,不能对应PostMessage的音讯(Synchronize格局也是如出一辙会堵塞)导致FMessageEvent会平昔守候下去,所以须求小心的是在主窗体销毁的时候绝不开展主线程职责的投递。可以在主窗体的destroy中,能够禁止相应投递任务,
在主窗体析构函数的始发,设置Enable := false;
那样iocpTask不会再管理其余的职责,注意是析构函数的首先句,不是窗体的FormDestory事件。

destructor TfrmMain.Destroy;
begin
  FLogTask.Enable := false;
  iocpTaskManager.Enable := False;

  .....

  inherited Destroy;
end;

地方的代码会促成程序不可能退出,FLogTask.PostATask(onLogMsg, ‘abcd’, True,
rtPostMessage);
是投递到主线程推行的天职,这一年主窗体正在销毁,不能够对应PostMessage的音讯(Synchronize格局也是一致会堵塞)导致FMessageEvent会一贯等候下去,所以要求静心的是在主窗体销毁的时候不要开展主线程任务的投递。能够在主窗体的destroy中,能够禁止相应投递任务,
在主窗体析构函数的开端,设置Enable := false;
那样iocpTask不会再管理任何的义务,注意是析构函数的首先句,不是窗体的FormDestory事件。

pvRunType:

pvRunInMainThread:

回调函数是或不是在主线程中运维,思虑到一些索要拜望主线程分界面包车型大巴天职,需要在主线程中运维。

回调函数,procedure(pvTaskRequest: TIocpTaskRequest) of object;
pvTaskRequest可以访谈到传播的taskData,strData等信息。

参数:

选用上很简短,上边解释一种相比较全面包车型大巴诀窍:

pvTaskWork

是传播的数目,为指针类型,能够是别的的数码,在回调函数中得以经过pvTaskRequest对象实行获取获得。

pvTaskData

destructor TfrmMain.Destroy;begin  FLogTask.Enable := false;  iocpTaskManager.Enable := False;  .....  inherited Destroy;end;

主窗体销毁时,非常多能源都早就被灭绝,如若此刻有投递须要主线程处理的职责,大概会导致主线程挂起,而全方位进度不也许收场的情事。

共同的方式,援救二种,一种是rtSync是应用线程的联腿方式,rtPostMessage,使用消息+
伊芙nt等待的方式。消息情势考虑到dll中一块方法不能够使用时能够应用的共同格局。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图