各位大侠帮帮忙:利用API函数在线程中传递参数(50分)

  • 主题发起人 主题发起人 思梦
  • 开始时间 开始时间

思梦

Unregistered / Unconfirmed
GUEST, unregistred user!
我自定义一个函数,想在一个线程当中调用它传递来的参数,不知怎么办.各位大侠帮助啦,50分奉上,以表敬意!
 
调用可以,传递参数,够呛。不如在线程中设置property或Public函数供外部调用并传入参数
 
Create( )应该可以吧
 
TO 善凉的狼:
Create()可以吗你有没有这方面的资料或是源代码.在Create()中可以带参数吗?我是刚刚研究这方面的东西请帮帮忙.
 
同意善良的狼,用CREATE()试试大概可以
 
你说的是这个意思吗?你看看这段代码
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type
Tmythread=class(TThread)
protected
procedure execute;override;
procedure xcdb;
end;
procedure mypro(var j:integer);
var
Form1: TForm1;
pram:integer;
implementation
{$R *.dfm}
procedure mypro(var j:integer);//你自定义的函数
begin
j:=j+60;
end;
procedure Tmythread.xcdb ;
begin
pram:=30;
mypro(pram);
form1.Edit1.Text :=inttostr(pram);//返回的参数pram
end;
procedure Tmythread.execute ;
begin
Synchronize(xcdb);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
mythread:Tmythread;
begin
mythread:=Tmythread.Create(false);
end;

end.
 
TO :桦树皮
你说的大概差不多,我先试试吧!
 
这样做那个参数传递不到里面?执行的时候EDIT.TEXT里面的值不会改变,继续请教谢谢答复
 
如果你用ttread类生成线程的话,那访问线程和访问普通对象差不多,可以在create时传递参数也可以在线程运行中传递,只是在运行中要考虑同步。下面是用create传
Tmythread=class(TThread)
private
Fpar:integer;
protected
procedure execute;override;
public
constructor create(createsuspended: Boolean;par:integer);//par为传递的参数
end;
...
constructor create(createsuspended: Boolean;par:integer);
begin
inherited create(CreateSuspended);
fpar:par;
end;
 
TO:迷糊, 谢谢你,我会试试的!
 
To:楼主
我上面写的我试过了.好使的.edit1.text的值能改变啊.你再试试吧.我这里可以的.
 
谢谢你,我也调试过了能通过但我将你的思想放到我的程序当中总是出错你帮忙看看:
这是我自定义的一个捕获帧回调函数:
function VideoStreamCallBack(hWnd:Hwnd;
lpVHdr:PVIDEOHDR):longint;
stdcall;
...
我有一条语句想让它在多线程当中执行:
datapoint:=IcseqCompressFrame(@V_Com,0,lpVHdr.lpData,
addr(bKeyframe),addr(M_OutActSize));
该怎么写???谢谢大家,帮帮忙,我刚接触这个!
也许迷糊的那个可以,我先试试!
to 桦树皮,你的看法呢?谢谢捧场!!!!!!!!!
 
CreateThread(...param: Pointer..);
PRec = TRec;
TRec = record
v: integer;
end;
var
r: TRec
CreateThread(...@r...);
func threadfunc(p: Pointer): longint;
stdcall;
begin
PRec(p)^.V := 20;
end;
 
TO:wlmmlw :
PRec(p)^.V := 20;
是什么意思?能帮忙解释一下嘛!
 
PRec看字面意思是他自己定义的一个指向Record的指针了

TProcessBar=class(TThread)
protected
timer:TTimer;
processbar:TProgressBar;
lblCaption: TLabel;
Procedure StepProcess;
public
constructor CreateIt(PriorityLevel: cardinal;
ProgBar : TProgressBar;
tmrProcess:TTimer;
lblProcess:TLabel);
procedure Execute;
override;
end;
 
多人接受答案了。
 
后退
顶部