首页 > 代码库 > Omnithreadlibary学习(3)-IOmniTask异步执行SendMessage
Omnithreadlibary学习(3)-IOmniTask异步执行SendMessage
在任务中发送消息, 可以是函数或者对象方法
TOmniTaskMessageEvent = procedure(const task: IOmniTaskControl; const msg: TOmniMessage) of object; TOmniOnTerminatedFunction = reference to procedure(const task: IOmniTaskControl);
program main;{$APPTYPE CONSOLE}{$R *.res}uses System.SysUtils, System.Classes, OtlParallel, OtlTask, OtlTaskControl, OtlComm, OtlCommon, IdHttp, Web.HTTPApp, WinApi.Windows, WinApi.Messages;const WM_RESULT = WM_USER;procedure HttpGet(Host, URL: String); var http: TIdHttp;begin http := TIdHttp.Create; // http.Request.Host := Host; http.Request.Method := ‘GET‘; http.Request.UserAgent := ‘Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36‘; http.Request.AcceptLanguage :=‘zh-CN,zh;q=0.8‘; http.Get(Host + URL); Writeln(‘===================Response Header==========================‘); Writeln(‘Server: ‘ + http.Response.Server); Writeln(‘Status Code :‘ + http.Response.ResponseCode.ToString); Writeln(‘CharSet:‘ + http.Response.CharSet); Writeln(‘ContentLength:‘ + http.Response.ContentLength.ToString()); Writeln(‘ContentType:‘ + http.Response.ContentType); http.Free;end;procedure LogResult(const task: IOmniTaskControl; const msg: TOmniMessage);begin WriteLn(Format(‘异步GET: %s‘, [msg.MsgData.CastToStringDef(‘‘)]));end;begin {异步执行发送消息} Parallel.Async( procedure(const task: IOmniTask) var Msg: String; begin Writeln(‘Thread ID ‘ + GetCurrentThreadID.ToString()); Msg := ‘task1 Start‘; task.Comm.Send(WM_RESULT, Msg); HttpGet(‘http://zh.wikipedia.org/‘, String(HttpEncode(‘wiki/文档‘))); task.Comm.Send(WM_RESULT, ‘task1 completed‘); end, Parallel.TaskConfig.Onmessage(WM_RESULT, LogResult)); Readln;end.
1.消息没有接收到..奇怪了
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。