• delphi 回调函数


    今天在DELPHI上随便编写了个回调函数的例子,怕以后忘了,赶紧给它给记下来,呵呵。

    觉的好简单,什么都没有,只是在同一个单元内,利用了DELPHI的多线程调用回调函数,高手别见笑哈!下次肯

    定要多加点东西完善滴,这次只是熟悉一下实现回调的整个过程。

    interface

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

    type
      TForm1 = class(TForm)
        Button1: TButton;
        ListBox1: TListBox;
        Button2: TButton;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
      type PFCALLBACK = function(Param1:integer;Param2:integer):integer;stdcall;
    // 定义回调函数的类型
    var
      Form1: TForm1;
      gCallBack:PFCALLBACK;
      function CBFunc(Param1:integer;Param2:integer):integer;stdcall;
    implementation
    //回调函数需要定义为全局
    {$R *.dfm}
    ///实现回调函数的功能
    function CBFunc(Param1:integer;Param2:integer):integer;
    var i:integer;
    begin
    //messagebox(application.Handle,'回调函数','提示信息',mb_ok);
    for i:=0 to 100 do
    begin
    sleep(100);
    self.ListBox1.Items.Add('回调函数');
    end;
    end;
    ///
    function MyThreadFunc(P:pointer):Longint;stdcall;
    begin
    gCallBack(0,1);//简单传个参数
    end;
    procedure testpro ;
    var i:integer;
       hThread:Thandle;//定义一个句柄
      ThreadID:DWord;
    begin
    for i:=0 to 4 do
    begin
    messagebox(application.Handle,'123','提示信息',mb_ok);
    if (i=2) then
    begin
    hthread:=CreateThread(nil,0,@MyThreadfunc,nil,0,ThreadID);//利用这种线程怎么说呢,肯定方便啦,但是
    //肯定功能上受到好多限制,所以啊,自己写,下次贴个上来
    end;
    end;
    end;
    ///
    function TestCallBack( Func:PFCALLBACK ):integer;
    begin
    gCallBack:=Func;
    testpro;
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    //testpro;
    TestCallBack(@CBFunc);
    end;
    procedure TForm1.Button2Click(Sender: TObject);
    begin
    self.ListBox1.Clear;
    end;
    end.
    使用回调函数需要注意的地方:
    type PFCALLBACK = function(Param1:integer;Param2:integer):integer;stdcall;
    // 定义回调函数的类型
    function CBFunc(Param1:integer;Param2:integer):integer;stdcall;
    //全局函数定义,指向函数的函数,指针!!!名字可以随便取,但参数之类的需要与定义
    //的函数类型一致。
    function CBFunc(Param1:integer;Param2:integer):integer;
    //写该函数体就没什么好说拉
    function TestCallBack( Func:PFCALLBACK ):integer;
    //传递回调函数的入口地址,最重要啦

  • 相关阅读:
    《剑指offer》39题—数组中出现次数超过一半的数字
    常见排序算法实现
    剑指offer题目分类
    腾讯2019实习面试题
    Word2vec资料
    Hello World投票以太坊Dapp教程-Part1
    以太坊开发框架Truffle学习笔记
    linux查看端口进程占用情况
    重置fedora root密码
    docker挂载本地目录的方法总结
  • 原文地址:https://www.cnblogs.com/googlegis/p/2978877.html
Copyright © 2020-2023  润新知