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

Omnithreadlibary学习(3)-IOmniTask异步执行SendMessage

时间: 2024-10-09 19:11:15

Omnithreadlibary学习(3)-IOmniTask异步执行SendMessage的相关文章

Omnithreadlibary学习(2)-IOmniTask异步执行

1.使用 procedure Parallel.Async(task: TProc; taskConfig: IOmniTaskConfig); 匿名委托访问网站 program main; {$APPTYPE CONSOLE} {$R *.res} uses System.SysUtils, OtlParallel, OtlTask, IdHttp, Web.HTTPApp, System.classes, WinApi.Windows; procedure HttpGet(Host, URL

Omnithreadlibary学习(1)-异步执行

program main; {$APPTYPE CONSOLE} {$R *.res} uses System.SysUtils, OtlParallel; begin Parallel.Async(procedure var i: Integer; begin for I := 0 to 100 do Writeln(Format('No.%d', [i])); end); Writeln('执行一'); Sleep(100); Writeln('执行二'); Sleep(100); Writ

ios网络学习------1get post异步请求

网络请求的步骤: get请求: #pragma mark - 这是私有方法,尽量不要再方法中直接使用属性,因为一般来说属性都是和界面关联的,我们可以通过参数的方式来使用属性 #pragma mark Get登录方法 - (void)loginWithGet:(NSString *)name pwd:(NSString *)pwd { //1确定地址NSURL NSString *urlString = [NSString stringWithFormat:@"www.baidu.com?user

Python学习---Python的异步IO[all]

1.1.1. 前期环境准备和基础知识 安装: pip3 install aiohttp pip3 install grequests pip3 install wheel pip3 install scrapy 注意: windows上scrapy依赖 https://sourceforge.net/projects/pywin32/files/ 安装Twisted a. http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted, b. 下载:Twis

Promise then中回调为什么是异步执行?Promise执行机制问题

今天发现一个问题,看下方代码 let p = new Promise(function(resolve, reject) { resolve(1) console.log('2222'); }); p.then(res => { console.log('1111'); }) 输出结果是2222 1111,而自己想的是1111 2222,带着问题查询之后发现. 原来then后边跟的都是异步执行..学习到了. 此链接是各位大佬的回答https://www.zhihu.com/question/57

异步执行js脚本——防止阻塞

JS允许我们修改页面中的所有方面:内容,样式和用户进行交互时的行为. 但是js同样可以阻塞DOM树的形成并且延迟页面的渲染. 让你的js变成异步执行,并且减少不必要的js文件从而提高性能. JavaScript可以查询和修改DOM和CSSOM JavaScript的执行阻塞了CSSOM的执行 JavaScript 阻塞了DOM的形成,除非特殊声明js异步执行 js是一个同步语言可以修改网页的任何方面: <html> <head> <meta name="viewpo

Windows 商店应用程序异步执行task和调整task优先级

在制作WP8.1手电筒的时候遇到一个问题,手电筒有时候能够点亮有时候点不亮. 在MSDN论坛上面有人告诉我可能是优先级的问题示意叫我使用CoreDispatcher 将task任务提高权限,但是发现还是不行. 后来发现点亮闪关灯需要在UI线程中触发,不能再异步中实现,感觉和画图有点类似不能在非主线程中绘制图片. 下面我就分享怎么利用CoreDispatcher改变task任务的优先级(不过还没有验证,因为我还没有遇到需要改变优先级的task,但是依据Windows运行时API的说明应该是正确的改

任务执行和任务处理的异步执行

最近在看<深入剖析Tomcat>,在第四章有讲解Tomcat的默认连接器,和这个连接器有着密切关系的是一个处理器.一个连接器可以对应多个处理器.连接器的作用是从客户端的请求中提取出Socket,然后把Socket传递给处理器来处理用户的请求.需要注意的是连接器的关注点是在接收请求,分派给他下游的处理器去执行,在把Socket传递下去后,连接器在这次请求中的任务已经完成.这里可以看到,连接器和处理器他们是异步进行的,异步的处理为多线程的执行提供了可能. 在这里我要说的是,在看了Tomcat的源码

Junit4学习笔记--方法的执行顺序

package com.lt.Demo.TestDemo; import java.util.Arrays; import java.util.Collection; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; im