- 7
- 0
- 约5.86千字
- 约 10页
- 2017-10-22 发布于北京
- 举报
[Delphi]多线程编程多线程同步之Mutex(互斥对象)
原理分析:互斥对象是系统内核对象, 各线程都可以拥有它, 谁拥有谁就能执行; 执行完毕, 用 ReleaseMutex 函数释放拥有权, 以让其他等待的线程使用.其他线程可用 WaitForSingleObject 函数排队等候(等候也可以理解为排队申请).使用过程:
var hMutex: THandle; {应该先声明一个全局的互斥句柄}
CreateMutex {建立一个互斥对象}
WaitForSingleObject {用等待函数排队等候}
ReleaseMutex {释放拥有权}
CloseHandle {最后释放互斥对象}
ReleaseMutex、CloseHandle 的参数都是 CreateMutex 返回的句柄, 关键是 CreateMutex 函数:
function CreateMutex(
lpMutexAttributes: PSecurityAttributes;
bInitialOwner: BOOL; {是否让创建者(此例中是主线程)拥有该互斥对象}
lpName: PWideChar {可以给此互斥对象取个名字, 如果不要名字可赋值为 nil}
): THandle;
{
1、第一个参数前面说过.
2、第二个参数在这里一定要是 False, 如果让主线程拥有互斥, 从理论上讲, 得等程序退出后其他线程才有机会;
取值 False 时, 第一个执行的线程将会最先拥有互斥对象, 一旦拥有其他线程就得先等等.
3、第三个参数, 如果给个名字, 函数将从系统中寻找是否有重名的互斥对象, 如果有则返回同名对象的存在的句柄;
如果赋值为 nil 将直接创建一个新的互斥对象; 下个例子将会有名字. }
本例效果图:
代码文件:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
var
f: Integer; {用这个变量协调一下各线程输出的位置}
hMutex: THandle; {互斥对象的句柄}
function MyThreadFun(p: Pointer): DWORD; stdcall;
var
i,y: Integer;
begin
Inc(f);
y := 20 * f;
for i := 0 to 50000 do
begin
if WaitForSingleObject(hMutex, INFINITE) = WAIT_OBJECT_0 then
begin
Form1.Canvas.Lock;
Form1.Canvas.TextOut(20, y, IntToStr(i));
Form1.Canvas.Unlock;
Sleep(0); {稍稍耽搁一点, 不然有时 Canvas 会协调不过来}
ReleaseMutex(hMutex);
end;
end;
Result := 0;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
ThreadID: DWORD;
begin
Repaint;
f := 0;
CreateThread(nil, 0, @MyThreadFun, nil, 0, ThreadID);
CreateThread(nil, 0, @MyThreadFun, nil, 0, ThreadID);
CreateThread(nil, 0, @MyThreadFun, nil, 0, ThreadID);
CreateThread(nil, 0, @MyThreadFun, nil, 0, ThreadID);
CreateThread(nil, 0, @MyThreadFu
您可能关注的文档
最近下载
- 租房合同范本,租房租房合同范本.docx VIP
- 2024-2025学年八年级数学上册:全等三角形的判定(ASA与AAS) 知识梳理与讲解.pdf VIP
- 2026-2030中国沼气产业深度解析及发展前景对策建议研究报告.docx
- 2023年广西南宁市中考数学一模试卷.pdf VIP
- 场地设计真题06-09年.pdf VIP
- 广东省2025年初中学业水平考试地理真题(含答案).pdf VIP
- 广东省高考:2025年-2023年《生物》考试真题与参考答案.pdf
- 2025年烟叶评级技能竞赛理论参考试题库-上(单选题汇总).docx
- 《心脑血管类》课件.pptx VIP
- 化工单机设备试车方案与操作流程.docx VIP
原创力文档

文档评论(0)