delphi多线程例子 采用createThread创建多线程
一、才用createThread创建多线程,需要先声明一个多线程句柄(全局的)如:hThread:THandle;
二、声明了一个多相处句柄之后,还需要先写一个函数,在创建多线程是用来掉用的函数。
三、使用createThread创建多线程,hThread:=createThread(nil, 0, @MyThreadFun1, nil, CREATE_SUSPENDED, ID);这里线程创建起是挂起状态
createThread方法参数:
function CreateThread(
lpThreadAttributes: Pointer; {安全设置}
dwStackSize: DWORD; {堆栈大小}
lpStartAddress: TFNThreadStartRoutine; {入口函数}
lpParameter: Pointer; {函数参数}
dwCreationFlags: DWORD; {启动选项}
var lpThreadId: DWORD {输出线程 ID }
): THandle; stdcall; {返回线程句柄}
四、使用线程时,需要将线程唤醒。不适用是需要将线程挂起。
ResumeThread(hThread);{唤醒线程}
SuspendThread(hThread);{挂起线程}
程序例子:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
btn1: TButton;
btn2: TButton;
btn3: TButton;
tmr1: TTimer;
edt1: TEdit;
btn4: TButton;
btn5: TButton;
procedure btn1Click(Sender: TObject);
procedure btn2Click(Sender: TObject);
procedure btn3Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure tmr1Timer(Sender: TObject);
procedure btn4Click(Sender: TObject);
procedure btn5Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
var
hThread: THandle;
hThread1:THandle;
num: Integer;
num1:Integer;
{$R *.dfm}
{线程入口函数}
function MyThreadFun(p: Pointer): Integer; stdcall;
begin
while True do {假如线程不挂起,循环一直运行}
begin
num:=Random(1000);
end;
Result:=0;
end;
function MyThreadFun1(p: Pointer): Integer; stdcall;
begin
while True do {假如线程不挂起,循环一直运行}
begin
num1:=Random(1000);
end;
Result:=0;
end;
{第一个按钮,用于建立和挂起线程,线程挂起相当于是线程暂停}
procedure TForm1.btn1Click(Sender: TObject);
var
ID:DWORD;
begin
hThread:=CreateThread(nil, 0, @MyThreadFun, nil, CREATE_SUSPENDED, ID);
hThread1:=CreateThread(nil, 0, @MyThreadFun1, nil, CREATE_SUSPENDED, ID);
btn1.Enabled:=False;
end;
procedure TForm1.btn2Click(Sender: TObject);
begin
ResumeThread(hThread);{唤醒线程}
end;
procedure TForm1.btn3Click(Sender: TObject);
begin
SuspendThread(hThread);{挂起线程}
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
tmr1.Interval:=100;
end;
procedure TForm1.tmr1Timer(Sender: TObject);
begin
Text := IntToStr(num);
edt1.Text:=IntToStr(num1);
end;
procedure TForm1.btn4Click(Sender: TObject);
begin
ResumeThread(hThread1);{唤醒线程2}
end;
procedure TForm1.btn5Click(Sender: TObject);
begin
SuspendThread(hThread1);{挂起线程2}
end;unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
btn1: TButton;
btn2: TButton;
btn3: TButton;
tmr1: TTimer;
edt1: TEdit;
btn4: TButton;
btn5: TButton;
procedure btn1Click(Sender: TObject);
procedure btn2Click(Sender: TObject);
procedure btn3Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure tmr1Timer(Sender: TObject);
procedure btn4Click(Sender: TObject);
procedure btn5Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
var
hThread: THandle;
hThread1:THandle;
num: Integer;
num1:Integer;
{$R *.dfm}
{线程入口函数}
function MyThreadFun(p: Pointer): Integer; stdcall;
begin
while True do {假如线程不挂起,循环一直运行}
begin
num:=Random(1000);
end;
Result:=0;
end;
function MyThreadFun1(p: Pointer): Integer; stdcall;
begin
while True do {假如线程不挂起,循环一直运行}
begin
num1:=Random(1000);
end;
Result:=0;
end;
{第一个按钮,用于建立和挂起线程,线程挂起相当于是线程暂停}
procedure TForm1.btn1Click(Sender: TObject);
var
ID:DWORD;
begin
hThread:=CreateThread(nil, 0, @MyThreadFun, nil, CREATE_SUSPENDED, ID);
hThread1:=CreateThread(nil, 0, @MyThreadFun1, nil, CREATE_SUSPENDED, ID);
btn1.Enabled:=False;
end;
procedure TForm1.btn2Click(Sender: TObject);
begin
ResumeThread(hThread);{唤醒线程}
end;
procedure TForm1.btn3Click(Sender: TObject);
begin
SuspendThread(hThread);{挂起线程}
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
tmr1.Interval:=100;
end;
procedure TForm1.tmr1Timer(Sender: TObject);
begin
Text := IntToStr(num);
edt1.Text:=IntToStr(num1);
end;
procedure TForm1.btn4Click(Sender: TObject);
begin
ResumeThread(hThread1);{唤醒线程2}
end;
procedure TForm1.btn5Click(Sender: TObject);
begin
SuspendThread(hThread1);{挂起线程2}
end;
delphi多线程例子 采用createThread创建多线程相关推荐
- 采用CreateThread()创建多线程程序
采用CreateThread()创建多线程程序 在window环境下,Win32 提供了一系列的API函数来完成线程的创建.挂起.恢复.终结以及通信等工作: 1.主要的函数列表: 序号 函数名 功能 ...
- java学习笔记 多线程(一)创建多线程,线程常用方法
首先是进程和线程的区别,进程就是像打开csgo.exe就是一个进程,然后打开LOL.exe又是另外一个进程了. 而线程呢,就是在同一进程内部,发生的事情. 那么就开始了解线程! 创建多线程: 线程有三 ...
- JavaEE多线程基本概念 及 创建多线程程序的三种方式
Hello! 大家好.(非常平庸的开场白 习惯一下).此篇博客是我的"处女作",因为是第一次写博客,在文章格式以及文章内容可能会有许多问题和缺陷.欢迎各位大神对我的文章进行指正!我 ...
- 创建多线程的几种方法介绍
目录 线程的概念及单线程多线程区别 创建多线程--继承线程类 创建多线程--实现Runnable接口 创建多线程--匿名类 总结 线程的概念及单线程多线程区别 首先要理解进程(Processor)和线 ...
- Delphi多线程详解CreateThread、TThread,以及线程间通过临界区(CriticalSection)实现同步
在了解多线程之前我们先了解一下进程和线程的关系 一个程序至少有一个主进程,一个进程至少有一个线程. 为了保证线程的安全性请大家看看下面介绍 Delphi多线程同步的一些处理方案大家可以参考:ht ...
- delphi 讲的比较详细的多线程(推荐)
在了解多线程之前我们先了解一下进程和线程的关系 一个程序至少有一个主进程,一个进程至少有一个线程. 为了保证线程的安全性请大家看看下面介绍 Delphi多线程同步的一些处理方案大家可以参考:ht ...
- 转:MFC中创建多线程
MFC中创建多线程 MFC的多线程函数必须声明为静态的或者是全局函数(不同的在于全局函数不能访问类的私有静态成员,而静态类函数可以):但这样的线程函数只能访问静态的成员变量,要实现访问类的其他成员,可 ...
- VC多线程编程之线程创建与示例
一.问题的提出 编写一个耗时的单线程程序: 新建一个基于对话框的应用程序SingleThread,在主对话框IDD_SINGLETHREAD_DIALOG添加一个按钮,ID为IDC_SLEEP_SIX ...
- java 多线程编程(包括创建线程的三种方式、线程的生命周期、线程的调度策略、线程同步、线程通信、线程池、死锁等)
1 多线程的基础知识 1.1 单核CPU和多核CPU 单核CPU,其实是一种假的多线程,因为在一个时间单元内,也只能执行一个线程的任务.微观上这些程序是分时的交替运行,只不过是给人的感觉是同时运行,那 ...
最新文章
- Delphi使用资源文件全攻略
- 【Linux系统编程】IO多路复用之epoll
- BW report execution callstack
- 揭开.NET 2.0配置之谜(一)
- 知道无人驾驶的网络安全有多重要吗?英国政府都决定插手开发了
- 服务器如何查看gpu型号,linux 查看服务器gpu
- javac命令不好用的解决方法
- java 转为Calendar_在Java中将String转换为Calendar对象
- win10 redis安装教程
- 8.企业安全建设入门(基于开源软件打造企业网络安全) --- 态势感知系统建设
- 基于java的教材管理_基于JAVA Web教材管理系统设计与实现.doc
- CADD课程学习(4)-- 获取没有晶体结构的蛋白(SWISS-Model)
- 方法:如何下载微信文章里的音频?-2022.4.13(已解决)
- mysql myd文件过大_Mysql数据文件大小超过4G了如何缩小优化
- 给大龄程序员的4种竞争力策略
- [张雨生][张雨生典藏合集22CD][APE/整轨/7.56 GB][旋风/快传]
- 卡尔曼滤波数据融合算法
- 【数据库】Oracle基础命令
- mysql 怎么存经纬度_mysql存储地图经纬度的表怎么设计?
- 解决ks8.0抓包问题
热门文章
- udec采场开挖教程_基于UDEC的采场矿山压力显现数值模拟研究
- android+汽车零部件企业的供应商质量管理体系有待完善,汽车零部件采购质量管理的相关探讨论文...
- 深度学习模型实战-深度学习模型在各大公司实际生产环境的应用讲解文章
- 【Python】打印输出200以内的所有素数,并输出素数的个数
- 外贸常用工具-领英精灵的批量加好友功能详细解析
- SQL语句中except是怎样用的?
- Angularts将前端数据生成报表
- 百度云无法在网页上调用客户端进行下载文件(已安装最新版)
- 树莓派系统烧录,连接电脑,电脑远程桌面控制树莓派(树莓派无屏幕,校园网)
- [转]局域网共享一键修复 18.5.8 https://zhuanlan.zhihu.com/p/24178142