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;

    三.运行结果

       

  • 相关阅读:
    宠物收养场 Treap
    最佳课题选择
    [USACO08JAN]手机网络Cell Phone Network
    [USACO09MAR]地震损失2Earthquake Damage 2
    字符串距离 简单DP
    小行星群 网络流 二分图
    游览牧场 最小费用流
    BZOJ1391: [Ceoi2008]order
    BZOJ1570: [JSOI2008]Blue Mary的旅行
    BZOJ2243: [SDOI2011]染色
  • 原文地址:https://www.cnblogs.com/edisonfeng/p/2515030.html
Copyright © 2011-2022 走看看