谁能简单的给出一个用CreateThread传递参数的例子?(100分)

  • 主题发起人 主题发起人 AI_Player
  • 开始时间 开始时间
A

AI_Player

Unregistered / Unconfirmed
GUEST, unregistred user!
比如传递一个Integer参数
 
使用CreateThread时候第四个参数
Visual Basic
操作系统: win
编程工具: vb
问题: 请问使用CreateThread时候第四个参数怎么传?就是要放入线程的函数的参数,只能传一个,因为不能用结构的引用传,请给出例子。
水平: 刚入门
回答:
CreateThread的第四个参数定义为As Any,当然可以传递结构。如:
Function DaThreadFunc(ByRef lpParam As PARAM_TYPE) As Long
...
End Function

Sub Main()

Dim lRet As Long
Dim lThreadID As Long
Dim stParam As PARAM_TYPE

lThreadID = 0
lRet = CreateThread(0, _
0, _
AddressOf DaThreadFunc, _
stParam, _
0, _
lThreadID)
...
End Sub
 
这篇文章我有看过,不过我要Delphi的例子
 
var int:integer;
Hthread:=createthread(nil,0,@kk,int,0,Threadid);
Hthread是句柄,nil 为安全级别,0好象是默认的栈的长度,@kk是入口,int就是要传的参数了,后面一个忘了,最后一个我想你也应该知道吧!!
procedure kk(int:integer);stdcall;
 
本人站点(下载110)http://www.down110.com
欢迎提出建议,大家一起进步! Email:web@down110.com
 
To razy: CreateThread的参数我都知道,但就是传递过去的参数的值并不正确。这是我的代码:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
implementation
{$R *.dfm}
procedure thread(x:integer);
stdcall;
begin
showmessage(inttostr(x));
end;

procedure TForm1.FormCreate(Sender: TObject);
var i:integer;
threadid:dword;
begin
i:=5;
createthread(nil,0,@thread,@i,0,threadid);
end;

end.

如果你能给出完整的例子,我立马给分。
 
定义的线程不在窗体内,不能用showmessage方法!!!
如果要用到窗口,把线程体建在一个独立单元里,比如UNIT2,然后在USES里加入DIALOGS。
如果要用到控件,最好用DELPHI的线程类实现!!上面的方法就是用到线程类!!
如果不用线程类,也可以用到控件,但是要把窗体当作参数传递,就不能传递第二个参数了!
 
刚才搞错了!
你传递过去的是一个INTEGER的指针!!
把程序修改成这样就可以了!!
procedure thread(x:pinteger);
stdcall;
begin
showmessage(inttostr(x^));
end;
 
好奇怪,你的线程里可以用SHOWMESSAGE方法吗?我怎么就是不行??
 
测试通过,不过showmessage没有成功弹出对话框。原来我以前错在没有加stdcall。
之所以我之前可以用showmessage,我猜是因为我并没能真正建立一个线程的缘故。
 
接受答案了.
 
后退
顶部