delphiXE关于线程和多线程、线程的同步与异步执行
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关于线程和多线程、线程的同步与异步执行相关推荐
- 深度理解GCD线程死锁,队列,同步和异步,串行和并发
介绍GCD 可以先看看这个 "并发"指的是程序的结构,"并行"指的是程序运行时的状态 https://blog.csdn.net/sinat_35512245/ ...
- java 线程组和线程_Java多线程 线程组原理及实例详解
线程组 线程组可以批量管理线程和线程组对象. 一级关联 例子如下,建立一级关联. public class MyThread43 implements Runnable{ public void ru ...
- Go语言同步和异步执行多个任务封装
同步适合多个连续执行的,每一步的执行依赖于上一步操作,异步执行则和任务执行顺序无关(如从10个站点抓取数据) 同步执行类RunnerAsync 支持返回超时检测,系统中断检测 错误常量定义,task/ ...
- Python 中的进程、线程、协程、同步、异步、回调(一)
在进一步之前,让我们先回顾一下各种上下文切换技术. 不过首先说明一点术语.当我们说"上下文"的时候,指的是程序在执行中的一个状态.通常我们会用调用栈来表示这个状态--栈记载了每个调 ...
- python协程怎么做数据同步_Python 中的进程、线程、协程、同步、异步、回调
进程和线程究竟是什么东西?传统网络服务模型是如何工作的?协程和线程的关系和区别有哪些?IO过程在什么时间发生? 一.上下文切换技术 简述 在进一步之前,让我们先回顾一下各种上下文切换技术. 不过首先说 ...
- iOS学习笔记-106.多线程05——CGD同步、异步函数和并行、串行、主队列示例
多线程05CGD同步异步函数和并行串行主队列示例 一说明与图示 二异步函数 并发队列 1 代码 2 结果 三异步函数 串行队列 1 代码示例 2 结果 四同步函数 并发队列 1 代码示例 2 结果 五 ...
- 浅谈jQuery技术的ajax框架async同步和异步执行原理
我们很多同学呀,不知道ajax框架async属性到底有什么作用,它在页面中的执行顺序到底是什么样的? 比如说我前端页面有以下几个方法: window.οnlοad= function charts() ...
- 2018年线程与多线程面试必知必会内容
本文目录 线程与多线程 线程的运行与创建 线程的状态 1 线程与多线程 线程是什么? 线程(Thread)是一个对象(Object).用来干什么?Java 线程(也称 JVM 线程)是 Java 进程 ...
- 泥瓦匠聊并发编程:线程与多线程必知必会(基础篇)
本文目录 线程与多线程 线程的运行与创建 线程的状态 1 线程与多线程 线程是什么? 线程(Thread)是一个对象(Object).用来干什么?Java 线程(也称 JVM 线程)是 Java 进程 ...
最新文章
- 【安全漏洞】Emissary 的SSRF漏洞(CVE-2021-32639)发现过程
- Linux上压缩目录以及目录下的所有文件
- JDBC-连接数据库代码
- Git复习(十三)之git revert用法及与git reset区别
- Python有了concurrent的话mutiprocessing和threading还有存在的意义吗?
- mysql cluster 外键_Mysql外键约束
- 背部辨识度极高!红米K30系列将率先采用高通5G处理器
- 做游戏,学编程(C语言) 1 实现弹跳小球
- Javascript下拉刷新
- Java: Queue
- 最基本的01背包问题
- 《Java技术》第四次作业
- 嵌入式系统应用开发—FPGA开发板—一位全加器仿真测试
- Au 音频效果参考:混响
- 【优化】1338- 分享一下图像优化原理
- c语言小熊时钟报告,C语言——小熊时钟.doc
- 从键盘上输入以下的数据:TOM:89|JERRY:90|TONY:95,数据格式为“姓名:成绩|姓名:成绩|姓名:成绩”,对输入的内容按成绩进行排序,并将结果按成绩由高到低排序。
- bitbucket 预览html,BitBucket基本使用操作
- 周报格式(sohu)
- 上帝向我们所怀的意念