delphi中使用多线程及函数调用多参数

 Windows API 调 用CreateThread 函 数 来 创 建 一 个 线 程。 函 数 如 下:

HANDLE CreateThread(
LPSECURITY_ATTRIBUTES  lpThreadAttributes,//线程安全属性地址
  DWORD  dwStackSize, //初始化线程堆栈尺寸
  LPTHREAD_START_ROUTINE  lpStartAddress,//线程函数所指向的地址
  LPVOID  lpParameter,//给线程函数传递的参数
  DWORD  dwCreationFlags,//有关线程的标志
  LPDWORD  lpThreadId//系统分配给线程的ID );

---- 第 一 个 参 数 是 安 全 属 性, 一 般 设 为nil, 使 用 缺 省 的 安 全 属 性。 当 我 们 想 此线 程 有 另 外 的 子 进 程 时, 可 改 变 它 的 属 性。

---- 第 二 个 参 数 是 线 程 堆 栈 尺 寸, 一 般 设 为0, 表 示 与 此 应 用 的 堆 栈 尺 寸 相同, 即 主 线 程 与 创 建 的 线 程 一 样 长 度 的 堆 栈。 并 且 其 长 度 会 根 据 需 要 自 动变 长。

---- 第 三 个 参 数, 也 是 最 重 要 的 一 个, 是 一 个 指 向 函 数 名 的 指 针, 但 传 递 时很 简 单, 只 需 在 线 程 函 数 名 前 加 上@ 就 可 以 了。

---- 第 四 个 参 数 是 你 需 要 向 线 程 函 数 传 递 的 参 数, 一 般 是 一 个 指 向 结 构 的 指针。 不 需 传 递 参 数 时, 则 这 个 参 数 设 为nil。

---- 第 五 个 参 数, 传 入 与 线 程 有 关 的 一 些 标 志, 如 果 是CREATE_SUSPENDED, 则 创 建一 个 挂 起 的 线 程, 即 这 个 线 程 本 身 已 创 建, 它 的 堆 栈 也 已 创 建。 但 这 个 线程 不 会 被 分 配 给CPU 时 间, 只 有 当ResumeThread 函 数 被 调 用 后 才 能 执 行; 当 然,也 可 以 调 用SuspendThread 函 数 再 次 挂 起 线 程。 要 是 标 志 为0, 那 么 一 旦 建 立 线程, 线 程 函 数 就 被 立 即 调 用。 一 般 传 为0 即 可。

---- 最 后 一 个 参 数 是 系 统 分 配 给 这 个 线 程 的 唯 一 的ID 标 志。

type
MYPARA=record
  title:pchar;
  str:pchar;
end;
PMYPARA=^MYPARA;

Function ThreadProc(Para:PMYPARA):DWORD;stdcall;
var
h:hmodule;
MyMessagebox:function(hWnd: HWND; lpText, lpCaption: PChar; uType: UINT): Integer;stdcall;
begin
result:=0;
h:=LoadLibrary('user32.dll');
if h>0 then
begin
  @MyMessagebox:=GetProcAddress(h,'MessageBoxA');
  if @MyMessagebox<>nil then
  MyMessageBox(0 ,Para^.str,Para^.title,0);
  freeLibrary(h);
end;
end;

创建线程可以这样:
var
  P:PMYPARA;
  ThreadHandle: THandle;
  TheThread: DWORD;
begin
  getmem(p,sizeof(p));//分配内存
  ThreadHandle:=0;
try
  p.title:='测试';    //填充
  p.str:='线程MessageBoxA';
  ThreadHandle:=createthread(nil,0,@ThreadProc,p,0,TheThread);
finally
  if ThreadHandle<>0 then closehandle(ThreadHandle);
  if p<>nil then freemem(p);
end;

转自:http://blog.csdn.net/yshxsh/article/details/1562380

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值