CreateThread传递多个参数的方法(利用结构体的参数指针)

很多朋友一直都在问CreateThread如何传递多个参数,CreateThread传递参数的方式是指针传递的,所以这里也可以利用指针来做!Demo 关键代码如下:

type
  TfrmTestThread = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

PParData = ^TParData;

TParData = record
    Count: Integer;
    TestStr: string[100];
  end;

var
  frmTestThread: TfrmTestThread;

implementation

{$R *.dfm}

function TestThread(AParData: PParData): Boolean; stdcall;
var
  I: Integer;
  DC: HDC;
  TestStr: string;
begin
  DC := GetDC(frmTestThread.Handle);
  SetBkColor(DC, GetSysColor(COLOR_BTNHIGHLIGHT));
  for I := 1 to AParData.Count do
  begin
    TestStr := AParData.TestStr + IntToStr(I);
    TextOut(DC, 10, 10, PChar(TestStr), Length(TestStr));
  end;
  ReleaseDC(frmTestThread.Handle, DC);
end;

procedure TfrmTestThread.Button1Click(Sender: TObject);
var
  hThread: THandle;
  ThreadID: DWord;
  vParData: PParData;
begin
  new(vParData);
  vParData.Count := 10000;
  vParData.TestStr := ‘多线程测试‘;
  hThread := CreateThread(nil, 0, @TestThread, vParData, 0, ThreadID);
  if hThread = 0 then
    MessageBox(Handle, ‘创建失败!‘, nil, MB_OK);
end;

end.

http://www.xuedelphi.cn/article/html2010/2010091922162863.html

http://www.cnblogs.com/azhqiang/p/3957312.html

时间: 07-09

CreateThread传递多个参数的方法(利用结构体的参数指针)的相关文章

c# 利用结构体获取json数据

最近做微信支付,要获取用户的openid,调用接口后返回的是json格式的数据,我想在c#后台把数据逐一取出,网上查了查,找到以下方法: 1.首先调用接口,要有一个post数据到指定url并返回数据的函数: protected string PostXmlToUrl(string url, string postData) { string returnmsg = ""; using (System.Net.WebClient wc = new System.Net.WebClient

C语言 结构体作为参数和返回值使用

方案一:结构体变量作为参数,进行传值. 编译器需要拷贝,不影响origin value,使用成员操作符(.)直接访问 /********************************************************************** * 版权所有 (C)2017, Wang maochun. * * 文件名称:travel.cpp * 文件标识:无 * 内容摘要:主要演示结构体作为参数以及返回值 * 其它说明:"传值” * 当前版本:V1.0 * 作 者:Wang m

C语言共享内存使用思路利用结构体

这里不介绍如何创建共享内存,如果想知道百度一下就好了.只介绍一下如何使用这一段连续的共享内存空间.思路就是利用结构体. 创建一个结构体,它的大小可以用sizeof()获取.注意这里有一个四字节对齐的问题,所以结构体的大小不仅仅是结构体内变量所占内存的简单相加. 思路:你创建一个结构体,无论你的结构体怎样,利用memcpy函数配合sizeof将结构体变量,copy到共享内存中然后,用的时候再用memcpy从共享内存copy到结构体中就行了. 一个例子如下: #include <string.h>

poj 2243 bfs 利用 结构体中的step成员保存步数 ,STL的队列

//BFS #include <iostream> #include <queue> using namespace std; bool used[8][8]; int move[8][2]={1,2, -1,2, -2,1, -2,-1, -1,-2, 1,-2, 2,-1, 2,1}; struct position { int i,j; int step; position(int a,int b,int c) { i=a; j=b; step=c; } }; int mai

指向结构体变量的指针作函数参数

 /********************* * 指向结构体变量的指针作函数参数 * ***********************/ #include<stdio.h> #include<string.h> struct student {  int num;  char name[20];  //char *name;    //若定义为指针则应与下面 stu.name = "jacob"; 配对使用,交叉使用则会报错                 //

利用结构体观察浮点数

利用结构体定义位域,可以观察浮点数内部是如何存储的,看代码: #include<cstdio> using namespace std; struct fp{ unsigned fraction:23; unsigned exponent:8; unsigned sign:1; }; int main(){ float a=0.1; fp *p=(fp*)&a; printf("%d\n",p->sign); printf("%d\n",p

结构体作为参数的反汇编

1:函数传参数的方式是将数据进行拷贝传递的. 2:基本数据类型编译器一般是通过PUSH指令来将参数入栈的,但是当传入的参数是结构体时,会采取,函数堆栈初始化的方式进行参数的拷贝 PUST EBP MOVE EBP,ESP SUP ESP,40H MOV ESI,[EBP-40] MOV EAX,0CCCCCCCH MOV ECX,16H;          需要初始化的堆栈的长度是40H也就是56个字节的长度,在32位的系统中,ESP的移动单位长度是4字节,所以需要16次初始化操作 REP ST

2017-9-19C#笔记(LinQ标准运算符,String类,String方法,结构体,静态构造函数,枚举类型,位标识)

在LINQ中的标准查询运算符 写LINQ的时候有两种语法:查询语法和方法语法,其中方法语法是命令形式的,它使用的是标准的方法调用.方法是一组叫做标准查询运算符的方法. 标准查询运算符有一系列叫做API的方法组成,他能让我们查询任何.NET数据集合.有关标准查询运算符的重要特性如下: (1)       被查询的结合对象叫做序列,它必须实现IEnumerable<T>接口, T是类型: (2)       标准查询运算符使用方法语法 (3)       一些运算符返回IEnumberable对象

避免野指针的方法及结构体小细节

避免野指针的方法 1 定义指针变量的时候,指针变量赋值成NULL 2 释放的时候,判断是不是NULL 3 释放完毕以后再赋值成NULL 结构体小细节 typedef struct _Teacher{ char name[64];//64 int age;//4 char tile[128];//128 char c;//1 }Teacher,*pTeacher; 以上定义了一个结构体变量,结构体变量所占字节数理论上应该是197(64+4+128+1) void main() { Teacher