在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
一.基本注意点 1.访问公共变量时需要设置临界区 2.不可直接操作界面,需通过向窗口发送消息来处理 PS:下面的测试程序中,为简单起见,在线程中直接对主界面进行了操作,实际开发 项目时是不应该如此操作的。
二.主要代码 公共变量与临界区变量 unit GlobalVar; interface uses Windows; var userCount:Integer; UserInfoRTL:TRTLCriticalSection; implementation end. 线程定义 unit UserInfoManage_Thread; interface uses Classes, SysUtils, GlobalVar,Windows; type TUserInfoManage_Thread= class(TThread) private public constructor Create(CreateSuspended: Boolean); procedure Execute;override; destructor Destroy;override; end; implementation uses Main; { TUserInfoManage_Thread } constructor TUserInfoManage_Thread.Create(CreateSuspended: Boolean); begin inherited Create(CreateSuspended); end; destructor TUserInfoManage_Thread.Destroy; begin inherited; end; procedure TUserInfoManage_Thread.Execute; var printStr:string; begin inherited; EnterCriticalSection(UserInfoRTL);//进入临界区 try userCount:=userCount+1; printStr:='第'+inttostr(userCount)+'个线程已启动,并进入临界区'; FrmMain.Memo1.Lines.Add(printStr); printStr:='休眠2000毫秒。。。'; FrmMain.Memo1.Lines.Add(printStr); Sleep(2000); printStr:='第'+inttostr(userCount)+'个线程执行完毕,离开临界区'; FrmMain.Memo1.Lines.Add(printStr+#13#10); finally LeaveCriticalSection(UserInfoRTL);//离开临界区 end; Self.FreeOnTerminate:=True; end; end. 主程序初始化“临界区变量” userCount:=0; InitializeCriticalSection(UserInfoRTL); 连续启动多个线程 begin TUserInfoManage_Thread.Create(False); TUserInfoManage_Thread.Create(False); TUserInfoManage_Thread.Create(False); end;
三.运行结果
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论