Delphi另一个多线程函数:BeginThread用法
Delphi另一个多线程函数:BeginThread
━━━━━━━━━━━━━━━━━━━━━━━━━━
Delphi也提供了一个相同功能的类似函数:
function BeginThread(
SecurityAttributes: Pointer;
StackSize: LongWord;
ThreadFunc: TThreadFunc;
Parameter: Pointer;
CreationFlags: LongWord;
var ThreadId: LongWord
): Integer;
━━━━━━━━━━━━━━━━━━━━━━━━━━
FHandle := BeginThread(nil, 0, @ThreadProc, Pointer(Self), CREATE_SUSPENDED, FThreadID);
这里就用到了前面说到的Delphi RTL函数BeginThread,它有很多参数,关键的是第三、四两个参数。
第三个参数就是前面说到的线程函数,即在线程中执行的代码部分。
第四个参数则是传递给线程函数的参数,在这里就是创建的线程对象(即Self)。
第五个是用于设置线程在创建后即挂起,不立即执行(启动线程的工作是在AfterConstruction中根据CreateSuspended标志来决定的),
第六个是返回线程ID。
━━━━━━━━━━━━━━━━━━━━━━━━━━
定义被BeginThread调用的函数
━━━━━━━━━━━━━━━━━━━━━━━━━━
声明:type TThreadFunc : Function(Parameter : Pointer) : Integer;
描述:TThreadFunc定义了一个函数而不是数据。这个函数通常作为BeginThread函数的一个参数,BeginThread是一个单独的线程运行时开始的。这个定义的TThreadFunc函数实现了线程的行为。
函数的返回代码是线程的退出代码。
uses
Forms, Dialogs, Windows, SysUtils;
type
TMsgRecord = record
thread : Integer;
msg : string[30];
end;
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
end;
var
Form1: TForm1;
Implementation
{$R *.dfm} // 包含窗体定义
ThreadVar // 必须允许每个线程有被传递增的记录变量的实例
msgPtr : ^TMsgRecord;
// 私有的线程过程,用于显示字符串
function ShowMsg(Parameter : Pointer) : Integer;
begin
// 设返回值为0
Result := 0;
// 映射指针到被传递进来的参数
// 每个线程有一份独立的msgPtr副本
msgPtr := Parameter;
// 在指定坐标显示对话框
ShowMessagePos('Thread '+IntToStr(msgPtr.thread)+' '+msgPtr.msg,
200*msgPtr.thread, 100);
// 结束线程
EndThread(0);
end;
procedure TForm1.FormCreate(Sender: TObject);
var
id1, id2 : LongWord;
thread1, thread2 : Integer;
msg1, msg2 : TMsgRecord;
showMsgFunc : TThreadFunc;
begin
// 指定线程函数地址
showMsgFunc := Addr(ShowMsg);
//初始化要显示的
msg1.thread := 1;
msg1.msg := 'Hello World';
msg2.thread := 2;
msg2.msg := 'Goodbye World';
// 开始第一个线程
thread1 := BeginThread(nil,
0,
showMsgFunc,
Addr(msg1),
0,
id1);
// 开始第二个线程
thread2 := BeginThread(nil,
0,
showMsgFunc,
Addr(msg2),
0,
id2);
// 确保线程关闭前,线程应执行完成
ShowMessagePos('Press this when other dialogs finished.', 200, 300);
// 最后关闭线程
CloseHandle(thread1);
CloseHandle(thread2);
end;
end.
程序运行结果,显示3个对话框:
Thread 1 Hello World
Thread 2 Goodbye World
Press this when other dialogs finished.
转自https://www.xuebuyuan.com/467050.html
转载于:https://www.cnblogs.com/zyb2016/p/11151918.html
Delphi另一个多线程函数:BeginThread用法相关推荐
- 在Delphi中可用FormatDateTime函数的用法
function FormatDateTime(const Format: string; DateTime: TDateTime): string; Format参数是一个格式化字符串.DateTi ...
- delphi中move函数的用法
delphi中move函数的用法 -------------------------------------------------------------------------------- 20 ...
- Delphi中 StrToIntDef函数的用法
Delphi中 StrToIntDef函数的用法: 比如我要判断一个文本框里输入的字符串能不能转换为integer类型,如果能,则返回转换后的整型数据,如果不能,则返回整数0,那么我就可以用strto ...
- 在Delphi中FormatDateTime函数的用法
在Delphi中FormatDateTime函数的用法 function FormatDateTime(const Format: string; DateTime: TDateTime): str ...
- delphi中move函数的用法 转
我们能看到以下代码 var pSource,pDest:PChar; len: integer; .......................//一些代码 Move(pSource,pDe ...
- python中如何查一个函数的用法_Python常见内置函数用法(三)
本文作者:孙雪丽 文字编辑:周聪聪 技术总编:张学人重大通知!!!2019年6月22日至24日在河南郑州举行Stata编程技术特别训练营,招生工作已经圆满结束.另外爬虫俱乐部将于2019年7月5日至7 ...
- c语言createthread函数用法,C++多线程函数CreateThread如何使用?
C++ CreateThread函数如何传递this指针作为参数 C++多线程函数CreateThread如何使用? #include #include using namespace std; /* ...
- Python编程语言学习:python语言中快速查询python自带模块函数的用法及其属性方法、如何查询某个函数关键词的用法、输出一个类或者实例化对象的所有属性和方法名之详细攻略
Python编程语言学习:python语言中快速查询python自带模块&函数的用法及其属性方法.如何查询某个函数&关键词的用法.输出一个类或者实例化对象的所有属性和方法名之详细攻略 ...
- __init__在python中的用法知乎_python中对_init_的理解及实例解析 python为什么要有一个init函数 知乎...
Python中"__init__"的意义是什么? Python中__init__的意义依偎着你心跳声如此频繁,就算世界末日小编也会嚣张的笑. 测试人员学python时,应该如何理解 ...
- 教程-Delphi中Spcomm使用属性及用法详解
Delphi中Spcomm使用属性及用法详解 Delphi是一种具有 功能强大.简便易用和代码执行速度快等优点的可视化快速应用开发工具,它在构架企业信息系统方面发挥着越来越重要的作用,许多程序员愿意选 ...
最新文章
- cuDNN 功能模块解析
- 比特币现金压力测试超越了24小时创造新纪录
- Log4J配置 category, appender,layout
- BookSmart Self Publishing
- 使用PHREAK算法实现Drools 6性能
- 让Sql Server也能出现如VS一样的智能提示工具--资源更新
- leetcode 1584. 连接所有点的最小费用(并查集)
- 论文解读丨空洞卷积框架搜索
- 神经网络 误差下降 准确率不上升_Go进程的HeapReleased上升,但是RSS不下降造成内存泄漏?...
- linux getline函数用法,Linux文本处理三剑客之awk学习笔记05:getline用法详解
- php上传文件 报的错误 $_FILES[‘file’]['error']
- Entity Framework使用心得
- Spring Boot Swagger3启动出现警告Unable to interpret the implicit parameter configuration with dataType
- 程序员不做独行侠——沟通的核心是感受
- matlab斐波那契数列画图,斐波拉契数列 斐波那契数列 matlab程序
- 如何剪切视频,只截取视频中间的一部分
- 美国软件开发实习生月薪排行榜
- 创造与魔法服务器在哪里显示,创造与魔法监狱在哪里 创造与魔法监狱坐标
- 三十、Fluent两种蒸发-冷凝模型理论及设置
- linux 中的指令
热门文章
- 互联网产品经理好书推荐
- 算法分析与设计 八大排序算法
- 诺基亚n1平板电脑刷机教程_Z Launcher详细使用教程_诺基亚 N1_平板电脑新闻-中关村在线...
- Visual Studio中绘制UML用例图
- linux统计某种文件大小命令,linux下对符合条件的文件大小做汇总统计的简单命令...
- 多应用集中落地,四川区块链产业爆发增长
- php laravel手册,laravel5.6手册下载|Laravel5.6中文手册pdf最新版下载(附使用方法)_星星软件园...
- 电信中兴B860AV2.1-T_线刷固件包
- 计算机辅助设计rhino试题,计算机辅助设计基础期末复习试题(完整版).doc
- 【OVRP问题】基于鲸鱼优化算法求解开放式车辆路径问题附matlab代码