delphiXE关于线程和多线程、线程的同步与异步执行

一、最好的参照案例

{$BDS}\source\fmx\FMX.Helpers.Android.pas

如下四个独立方法:

type
  TMethodCallback = procedure of object;
  TCallBack = reference to procedure;

procedure CallInUIThread(AMethod: TMethodCallback); overload;  //:在UI中调用线程并回调某个对象或类的事件:在自己的单元文件重新实现
procedure CallInUIThread(AMethod: TCallBack); overload; //:在UI中调用线程并回调某个匿名过程:在自己的单元文件重新实现
procedure CallInUIThreadAndWaitFinishing(AMethod: TMethodCallback); overload; //:在UI中调用线程且等待其结束并回调某个对象或类的事件:在自己的单元文件重新实现
procedure CallInUIThreadAndWaitFinishing(AMethod: TCallBack); overload; //:在UI中调用线程且等待其结束并回调某个匿名过程:在自己的单元文件重新实现

implementation

use FMX.Types, System.Generics.Collections,
  System.SyncObjs, System.Rtti, System.Classes, FMX.Consts;

var
    //ActiveJavaRunnables: TThreadList<TRunnable>;  //改为:
    ActiveThreadsRunnables: TThreadList<TRunnable>;  //:活动的能运行的线程列表:uses System.Generics.Collections

initialization
  ActiveJavaRunnables := TThreadList<TRunnable>.Create;

finalization
  ActiveJavaRunnables.DisposeOf;
end.

二、将其稍作修改,变成你自己的通用线程执行类

三、方法:

1、简单的线程同步:

1.1、当前线程,简单的线程同步

try
      //在这里写i的数据获取及处理:......
    finally
      TThread.Synchronize(nil,
        // var :你的同步中间变量;   
      procedure begin
          Memo1.Lines.Add( LResp.ContentAsString( System.SysUtils.TEncoding.UTF8) );
            //LResp.ContentAsString(System.SysUtils.TEncoding.UTF8);
            //Memo1.Lines.Add(LRespoContent.DataString); //:乱码转换下 ::这样也可以
      end );  //:与UI交互,信息量少,可以这样简单短暂地阻塞一下UI;
          //:若信息量大,请用异步方式处理完数据,得到通知后再加载UI

或用队列同步:

TThread.Queue(nil,
      // var :你的队列中间变量;   
      procedure begin
          //在这里写您与UI界面元素的交互代码:
      end;

1.2、当前线程的匿名线程,简单的线程同步

TThread.CreateAnonymousThread (
      procedure
          // var :你的匿名线程中间变量; 
      begin
          //在这里写您与UI界面元素的交互代码:
      end;

1.3、当前线程的子线程,简单的线程同步

var LSubAnonymousThread :TAnonymousThread;

LSubAnonymousThread := TAnonymousThread.Create(
      procedure
          // var :你的匿名线程中间变量; 
      begin
          //在这里写您与UI界面元素的交互代码:
      end;

2、其它,见本博客相关文章:

2.1、Delphi中的匿名方法及异步任务:

https://blog.csdn.net/pulledup/article/details/102675723

2.2、PPL并行编程库01-概念

https://blog.csdn.net/pulledup/article/details/102063074

2.3、PPL并行编程库02-多任务

https://blog.csdn.net/pulledup/article/details/102068352

2.4、PPL并行编程库03-单任务、异步多任务、同步多任务

https://blog.csdn.net/pulledup/article/details/102081210

2.5、delphi线程监视器System.TMonitor  : 若存在线程嵌套 或 与UI交互时有时需要强制同步:

https://blog.csdn.net/pulledup/article/details/105175193

2.6、请求远程数据的同步及异步处理1:

delphi Restful:客户端实现的四种方式及其比较:  https://blog.csdn.net/pulledup/article/details/104132753

2.7、请求远程数据的同步及异步处理2:

案例:delphi判断网络状态是否正常:  https://blog.csdn.net/pulledup/article/details/104584564

2.8、多线程同步对象及其等待结果

https://blog.csdn.net/pulledup/article/details/106136991

2.9、再谈delphi XE多线程同步对象及其管理二

https://blog.csdn.net/pulledup/article/details/106631889

喜欢的话,就在下面点个赞、收藏就好了,方便看下次的分享:

delphiXE关于线程和多线程、线程的同步与异步执行相关推荐

  1. 深度理解GCD线程死锁,队列,同步和异步,串行和并发

    介绍GCD 可以先看看这个 "并发"指的是程序的结构,"并行"指的是程序运行时的状态 https://blog.csdn.net/sinat_35512245/ ...

  2. java 线程组和线程_Java多线程 线程组原理及实例详解

    线程组 线程组可以批量管理线程和线程组对象. 一级关联 例子如下,建立一级关联. public class MyThread43 implements Runnable{ public void ru ...

  3. Go语言同步和异步执行多个任务封装

    同步适合多个连续执行的,每一步的执行依赖于上一步操作,异步执行则和任务执行顺序无关(如从10个站点抓取数据) 同步执行类RunnerAsync 支持返回超时检测,系统中断检测 错误常量定义,task/ ...

  4. Python 中的进程、线程、协程、同步、异步、回调(一)

    在进一步之前,让我们先回顾一下各种上下文切换技术. 不过首先说明一点术语.当我们说"上下文"的时候,指的是程序在执行中的一个状态.通常我们会用调用栈来表示这个状态--栈记载了每个调 ...

  5. python协程怎么做数据同步_Python 中的进程、线程、协程、同步、异步、回调

    进程和线程究竟是什么东西?传统网络服务模型是如何工作的?协程和线程的关系和区别有哪些?IO过程在什么时间发生? 一.上下文切换技术 简述 在进一步之前,让我们先回顾一下各种上下文切换技术. 不过首先说 ...

  6. iOS学习笔记-106.多线程05——CGD同步、异步函数和并行、串行、主队列示例

    多线程05CGD同步异步函数和并行串行主队列示例 一说明与图示 二异步函数 并发队列 1 代码 2 结果 三异步函数 串行队列 1 代码示例 2 结果 四同步函数 并发队列 1 代码示例 2 结果 五 ...

  7. 浅谈jQuery技术的ajax框架async同步和异步执行原理

    我们很多同学呀,不知道ajax框架async属性到底有什么作用,它在页面中的执行顺序到底是什么样的? 比如说我前端页面有以下几个方法: window.οnlοad= function charts() ...

  8. 2018年线程与多线程面试必知必会内容

    本文目录 线程与多线程 线程的运行与创建 线程的状态 1 线程与多线程 线程是什么? 线程(Thread)是一个对象(Object).用来干什么?Java 线程(也称 JVM 线程)是 Java 进程 ...

  9. 泥瓦匠聊并发编程:线程与多线程必知必会(基础篇)

    本文目录 线程与多线程 线程的运行与创建 线程的状态 1 线程与多线程 线程是什么? 线程(Thread)是一个对象(Object).用来干什么?Java 线程(也称 JVM 线程)是 Java 进程 ...

最新文章

  1. 【安全漏洞】Emissary 的SSRF漏洞(CVE-2021-32639)发现过程
  2. Linux上压缩目录以及目录下的所有文件
  3. JDBC-连接数据库代码
  4. Git复习(十三)之git revert用法及与git reset区别
  5. Python有了concurrent的话mutiprocessing和threading还有存在的意义吗?
  6. mysql cluster 外键_Mysql外键约束
  7. 背部辨识度极高!红米K30系列将率先采用高通5G处理器
  8. 做游戏,学编程(C语言) 1 实现弹跳小球
  9. Javascript下拉刷新
  10. Java: Queue
  11. 最基本的01背包问题
  12. 《Java技术》第四次作业
  13. 嵌入式系统应用开发—FPGA开发板—一位全加器仿真测试
  14. Au 音频效果参考:混响
  15. 【优化】1338- 分享一下图像优化原理
  16. c语言小熊时钟报告,C语言——小熊时钟.doc
  17. 从键盘上输入以下的数据:TOM:89|JERRY:90|TONY:95,数据格式为“姓名:成绩|姓名:成绩|姓名:成绩”,对输入的内容按成绩进行排序,并将结果按成绩由高到低排序。
  18. bitbucket 预览html,BitBucket基本使用操作
  19. 周报格式(sohu)
  20. 上帝向我们所怀的意念

热门文章

  1. 七夕情人节送女朋友什么礼物?七夕情人节礼物推荐
  2. 下载并预览pdf,提示未能加载PDF文档 - vue
  3. Oracle Grant详解
  4. easyrp-java_EasyPR-Java
  5. maven创建父子依赖项目—pom
  6. vscode cshtml 智能提示
  7. C专家编程 精编之一
  8. tomcat 日志禁用
  9. “美亚杯”第三届中国电子数据取证大赛答案解析(个人赛)
  10. 树与二叉树基本性质相关