zoukankan      html  css  js  c++  java
  • Delphi线程变量和Word((@Text)^) := SizeOf(Text)

    ---------------D7

     仅仅记录学习

    -------------------

    -----------------------Unit

    unit Unit1;

    interface

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

    type
    TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Memo1: TMemo;
    Button4: TButton;
    Button5: TButton;
    ADOQuery1: TADOQuery;
    ADOConnection1: TADOConnection;
    Button6: TButton;
    Panel1: TPanel;
    Button7: TButton;
    Button8: TButton;
    Button9: TButton;
    Button10: TButton;
    Button11: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(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);
    procedure Button8Click(Sender: TObject);
    procedure Button9Click(Sender: TObject);
    procedure Button10Click(Sender: TObject);
    procedure Button11Click(Sender: TObject);
    private
    { Private declarations }
    public
    { Public declarations }
    end;
    TMyThread=class(TThread)
    private
    FName:String;
    protected
    procedure execute;override;
    public
    property Name:string read FName write FName;
    end;
    TMyThread01=class(TThread)
    private
    FName:String;
    protected
    procedure execute;override;
    public
    property Name:string read FName write FName;
    end;
    var
    Form1: TForm1;
    MyThread_01:TMyThread;
    MyThread_02:TMyThread;

    MyThread01_001:TMyThread01;
    MyThread01_002:TMyThread01;
    MyThread01_003:TMyThread01;
    MyThread01_004:TMyThread01;
    MyThread01_005:TMyThread01;
    MyThread01_006:TMyThread01;
    implementation
    var
    VV:Integer;
    vList:TList;
    threadvar
    sss:integer;

    {$R *.dfm}

    procedure TForm1.Button1Click(Sender: TObject);
    var
    lpCreationTime, lpExitTime, lpKernelTime, lpUserTime: TFileTime;
    begin
    GetThreadTimes( MyThread_01.Handle,lpCreationTime, lpExitTime, lpKernelTime, lpUserTime) ;
    Memo1.Lines.Add('lpCreationTime'+IntToStr(lpCreationTime.dwHighDateTime -lpCreationTime.dwLowDateTime )+'毫秒');
    Memo1.Lines.Add('lpExitTime'+IntToStr(lpExitTime.dwHighDateTime -lpExitTime.dwLowDateTime )+'毫秒');
    Memo1.Lines.Add('lpKernelTime'+IntToStr(lpKernelTime.dwHighDateTime -lpKernelTime.dwLowDateTime )+'毫秒');
    Memo1.Lines.Add('UserTime'+IntToStr(lpUserTime.dwHighDateTime -lpUserTime.dwLowDateTime )+'毫秒');
    end;

    { TMyThread }

    procedure TMyThread.execute;
    begin
    sss:=Self.Handle;
    vv:=Self.Handle;
    //inherited;
    while not Terminated do
    begin
    Sleep(1000);
    Form1.Memo1.Lines.Add(Self.name +' sss '+IntToStr(sss)+'vv'+inttostr(vv));
    end;

    end;

    procedure TForm1.FormCreate(Sender: TObject);
    begin
    MyThread_01:=TMyThread.Create(True);
    MyThread_01.Name:='MyThread_01';
    MyThread_02:=TMyThread.Create(True);
    MyThread_02.Name:='MyThread_02';
    end;

    procedure TForm1.Button2Click(Sender: TObject);
    begin
    MyThread_01.Resume;
    MyThread_02.Resume;
    end;

    procedure TForm1.Button3Click(Sender: TObject);
    begin
    MyThread_01.Suspend;
    MyThread_02.Suspend;
    end;

    procedure TForm1.Button4Click(Sender: TObject);
    begin
    ShowMessage(' sss '+IntToStr(sss)+'vv'+inttostr(vv));
    end;

    procedure TForm1.Button5Click(Sender: TObject);
    var
    sssss:TStrings;
    begin
    sssss:=TStringList.Create;
    //
    ShowMessage(IntToStr(Memo1.Lines.count)+Memo1.Lines[100]+sssss.Strings[8]);
    vList.Items[2];
    end;

    // Word((@Text)^) := SizeOf(Text);的意思
    procedure TForm1.Button6Click(Sender: TObject);
    var Text :array[0..1023] of char;
    PW :^Word;
    I:word;
    begin
    //text := 'afd';
    PW := @Text;
    PW^ := Sizeof(Text);//取长度
    PW := @Text;
    I := PW^;
    //ShowMessage(IntToStr(Longint(@Text)));
    //showMessage(intToStr(i));//1024
    //showmessage(text[0]);
    //showmessage(text[1]);
    //ShowMessage(text);
    end;

    procedure TForm1.Button7Click(Sender: TObject);
    var
    ado1:TADOQuery;
    begin
    ado1:=ADOQuery1 ;
    ado1.Free;
    end;

    procedure TForm1.Button8Click(Sender: TObject);
    begin
    ShowMessage(ADOQuery1.Name );
    end;

    { TMyThread01 }

    procedure TMyThread01.execute;
    begin
    //inherited;

    while not Terminated do
    begin
    Inc(sss);
    Form1.Memo1.Lines.Add(self.name+'_'+inttostr(sss));
    end;
    end;

    procedure TForm1.Button9Click(Sender: TObject);
    begin
    if Assigned(MyThread01_001)=False then
    begin
    MyThread01_001:=TMyThread01.Create(True);
    MyThread01_002:=TMyThread01.Create(True);
    MyThread01_003:=TMyThread01.Create(True);
    MyThread01_004:=TMyThread01.Create(True);
    MyThread01_005:=TMyThread01.Create(True);
    MyThread01_006:=TMyThread01.Create(True);
    MyThread01_001.Name:='MyThread01_001';
    MyThread01_002.Name:='MyThread01_002';
    MyThread01_003.Name:='MyThread01_003';
    MyThread01_004.Name:='MyThread01_004';
    MyThread01_005.Name:='MyThread01_005';
    MyThread01_006.Name:='MyThread01_006';
    end;
    end;

    procedure TForm1.Button10Click(Sender: TObject);
    begin
    MyThread01_001.Resume ;
    MyThread01_002.Resume ;
    MyThread01_003.Resume ;
    MyThread01_004.Resume ;
    MyThread01_005.Resume ;
    MyThread01_006.Resume ;
    end;

    procedure TForm1.Button11Click(Sender: TObject);
    begin
    MyThread01_001.Suspend ;
    MyThread01_002.Suspend ;
    MyThread01_003.Suspend ;
    MyThread01_004.Suspend ;
    MyThread01_005.Suspend ;
    MyThread01_006.Suspend ;
    end;

    end.

    补充:
    PW^ := Sizeof(Text);
    SizeOf(Text)为$0400
    存在PW指向的第一个WORD中,高位字节存在高地址
    而Text的内容被破坏
    而调用
    showMessage(intToStr(i))
    由于i为word,当调用IntToStr(i)时会产生MOVZX指令进行零扩充,所以得出来的是$00000400
    即1024

    ----------------------Unit结束

    --------------------Form

    object Form1: TForm1
    Left = 626
    Top = 222
    Width = 624
    Height = 675
    Caption = 'Form1'
    Color = clBtnFace
    Font.Charset = DEFAULT_CHARSET
    Font.Color = clWindowText
    Font.Height = -11
    Font.Name = 'MS Sans Serif'
    Font.Style = []
    OldCreateOrder = False
    OnCreate = FormCreate
    PixelsPerInch = 96
    TextHeight = 13
    object Button1: TButton
    Left = 16
    Top = 328
    Width = 121
    Height = 25
    Caption = 'B1_显示线程时间'
    TabOrder = 0
    OnClick = Button1Click
    end
    object Button2: TButton
    Left = 32
    Top = 232
    Width = 89
    Height = 25
    Caption = 'Button2_开始'
    TabOrder = 1
    OnClick = Button2Click
    end
    object Button3: TButton
    Left = 32
    Top = 280
    Width = 75
    Height = 25
    Caption = 'Button3_暂停'
    TabOrder = 2
    OnClick = Button3Click
    end
    object Memo1: TMemo
    Left = 16
    Top = 8
    Width = 289
    Height = 137
    ImeName = '中文(简体) - 搜狗拼音输入法'
    Lines.Strings = (
    'Memo1')
    ScrollBars = ssBoth
    TabOrder = 3
    end
    object Button4: TButton
    Left = 16
    Top = 360
    Width = 161
    Height = 25
    Caption = 'B4_全局变量和线程变量'
    TabOrder = 4
    OnClick = Button4Click
    end
    object Button5: TButton
    Left = 192
    Top = 336
    Width = 201
    Height = 25
    Caption = 'List和memo的下标越界问题_B5'
    TabOrder = 5
    OnClick = Button5Click
    end
    object Button6: TButton
    Left = 424
    Top = 336
    Width = 137
    Height = 25
    Caption = 'B6_有意思的转换赋值'
    TabOrder = 6
    OnClick = Button6Click
    end
    object Panel1: TPanel
    Left = 304
    Top = 224
    Width = 185
    Height = 41
    Caption = 'Panel1'
    TabOrder = 7
    end
    object Button7: TButton
    Left = 200
    Top = 288
    Width = 115
    Height = 25
    Caption = 'B7_赋值并释放'
    TabOrder = 8
    OnClick = Button7Click
    end
    object Button8: TButton
    Left = 368
    Top = 288
    Width = 169
    Height = 25
    Caption = 'B8_显示ADO名字'
    TabOrder = 9
    OnClick = Button8Click
    end
    object Button9: TButton
    Left = 152
    Top = 560
    Width = 113
    Height = 25
    Caption = 'B9_建立线程'
    TabOrder = 10
    OnClick = Button9Click
    end
    object Button10: TButton
    Left = 280
    Top = 560
    Width = 81
    Height = 25
    Caption = 'B_10开始'
    TabOrder = 11
    OnClick = Button10Click
    end
    object Button11: TButton
    Left = 376
    Top = 560
    Width = 75
    Height = 25
    Caption = 'B_11暂停'
    TabOrder = 12
    OnClick = Button11Click
    end
    object ADOQuery1: TADOQuery
    Parameters = <>
    Left = 352
    Top = 248
    end
    object ADOConnection1: TADOConnection
    Left = 408
    Top = 184
    end
    end

    --------------------Form结束

  • 相关阅读:
    Django之路由系统(urls.py)
    Django之配置文件(settings.py)
    初始Django
    CSS基础
    HTML
    mysql基础知识拾遗
    python的进程
    python 队列
    python的线程
    2017年10月21日 CSS常用样式&鼠标样式 以及 jQuery鼠标事件& jQuery图片轮播& jQuery图片自动轮播代码
  • 原文地址:https://www.cnblogs.com/dmqhjp/p/14596947.html
Copyright © 2011-2022 走看看