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.消息没有接收到..奇怪了

转载于:https://www.cnblogs.com/pengshaomin/p/3910633.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值