zoukankan      html  css  js  c++  java
  • 验证Event的全局性

    思路很简单, 创建一事件,再创建一线程等待事件,再用OpenEvent根据事件名称打开,

    MSDN说明:

    Fast user switching is implemented using Terminal Services sessions. The first user to log on uses session 0, the next user to log on uses session 1, and so on. Kernel object names must follow the guidelines outlined for Terminal Services so that applications can support multiple users.

    看得出事件具有传递性

    代码
    unit Unit1;

    interface

    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;

    type
      TestThread 
    = class(TThread)
      
    private
        I: Integer;
        
    procedure ShowMsg;
      
    protected
        
    procedure Execute; override;
      
    public
      
    end;

      TForm1 
    = class(TForm)
        Button1: TButton;
        Memo1: TMemo;
        Button2: TButton;
        Button3: TButton;
        Button4: TButton;
        Button5: TButton;
        Button6: TButton;
        Button7: TButton;
        
    procedure Button1Click(Sender: TObject);
        
    procedure Button2Click(Sender: TObject);
        
    procedure Button3Click(Sender: TObject);
        
    procedure Button4Click(Sender: TObject);
        
    procedure Button5Click(Sender: TObject);
        
    procedure Button6Click(Sender: TObject);
        
    procedure Button7Click(Sender: TObject);
      
    private
        
    { Private declarations }
      
    public
        
    { Public declarations }
      
    end;

    var
      Form1: TForm1;
      GHandle, GHandle1: THandle;

    const
      Str: 
    string = '123';

    implementation

    {$R *.dfm}

    procedure TForm1.Button1Click(Sender: TObject);
    begin
      GHandle :
    = CreateEvent(nil, True, False, PChar(Str));
      Memo1.Lines.Add(IntToStr(GHandle));
    end;

    procedure TForm1.Button2Click(Sender: TObject);
    begin
      
    try
        GHandle1 :
    = OpenEvent(EVENT_ALL_ACCESS, False, PChar(Str));
      
    finally
        Memo1.Lines.Add(SysErrorMessage(GetLastError));
      
    end;
      Memo1.Lines.Add(IntToStr(GHandle1));
    end;

    { TestThread }

    procedure TestThread.Execute;
    begin
      
    inherited;
      I :
    = 0;
      Self.FreeOnTerminate :
    = False;
      
    while not self.Terminated do
      
    begin
        WaitForSingleObject(GHandle, INFINITE);
        Synchronize(ShowMsg);
        InterlockedIncrement(I);
      
    end;
    end;

    procedure TestThread.ShowMsg;
    begin
      Form1.Memo1.Lines.Add(IntToStr(I));
    end;

    procedure TForm1.Button3Click(Sender: TObject);
    var
      T: TestThread;
    begin
      T :
    = TestThread.Create(False);
    end;

    procedure TForm1.Button4Click(Sender: TObject);
    begin
      SetEvent(GHandle);
    end;

    procedure TForm1.Button5Click(Sender: TObject);
    begin
      ResetEvent(GHandle);
    end;

    procedure TForm1.Button6Click(Sender: TObject);
    begin
      SetEvent(GHandle1);
    end;

    procedure TForm1.Button7Click(Sender: TObject);
    begin
      ResetEvent(GHandle1)
    end;

    end.
  • 相关阅读:
    通过Javascript调用微软认知服务情感检测接口的两种实现方式
    Microsoft Flow 概览
    使用PowerApps快速构建基于主题的轻业务应用 —— 进阶篇
    从三个语言(C++,Java,C#)的几个性能测试案例来看性能优化
    自己动手,打造轻量级VSCode/C#环境代替LinqPad
    2015年总结
    将知识变成你的技能点
    瞎子摸象与刻舟求剑
    俺的追求,下一个五年的指导纲领
    工作中任务管理的四个原则和四个技能
  • 原文地址:https://www.cnblogs.com/chengxin1982/p/1752515.html
Copyright © 2011-2022 走看看