zoukankan      html  css  js  c++  java
  • 多线程【Delphi版】

    一.基本注意点

              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;

    三.运行结果

       

  • 相关阅读:
    nginx 反向代理 apache 服务
    IIS 设置404页面 显示系统找不到指定的文件
    centos6.6 下 安装 nginx
    sql优化建议
    php的静态化
    vsftp上传文件出现553 Could not create file
    php安装libevent扩展
    discuz回贴通知插件实现-显示用户状态设置
    discuz回贴通知插件实现-插件的多语言
    discuz回贴通知插件实现-插件后台管理配置
  • 原文地址:https://www.cnblogs.com/edisonfeng/p/2515030.html
Copyright © 2011-2022 走看看