高手請過來看看 begin Thread傳遞參數問題(50分)

H

hgptm

Unregistered / Unconfirmed
GUEST, unregistred user!
begin
Thread如何傳遞參數呢?
問題如下:

var th2:cardinal;
h2:integer;
procedure Test(StartPos: integer);
var i:integer;
begin
i:=startPos;
while truedo
begin
application.ProcessMessages ;
i:=i+1;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);//啟動線程
begin
h2:=begin
thread(nil,1024,@Test,[red]這裡如何傳遞[/red]?,0,th2);
end;
 
F

flamboyant

Unregistered / Unconfirmed
GUEST, unregistred user!
type TThreadFunc = function(Parameter: Pointer): Integer;
begin
thread(nil,1024,@Test,这里就传递的是TThreadFunc的parameter,0,th2);
可以看出你的Test函数有问题。
 
H

hgptm

Unregistered / Unconfirmed
GUEST, unregistred user!
flamboyant兄
能給個例子學習學習吧,
我對begin
thread的參數 Parameter:pointer 的用法不是很清楚.

感謝!
 
H

hgptm

Unregistered / Unconfirmed
GUEST, unregistred user!
flamboyant兄
將代碼糾正如下:
問題是其直沒傳遞過來,是指針的哪個地方有問題呢?
有重謝!
var th2:cardinal;
h2:integer;
function Test(StartPos: pointer):integer ;
var i:^integer;
a: integer;
begin
i:=startPos;
a := i^;
//這裡為何a<>5?
showmessage(inttostr(a));
exit;

end;

procedure TForm1.Button1Click(Sender: TObject);
var aa: integer;
begin
aa :=5;
h2:=begin
thread(nil,1024,@Test,@aa,0,th2);
end;
 
F

flamboyant

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure Test(param1: Pointer);
var i:integer;
begin
i:=integer(param1^);
while truedo
begin
application.ProcessMessages ;
i:=i+1;
if i>100 then
begin
application.MessageBox(pchar('i:'+inttostr(i)),'aaa',mb_ok);
break;
end;
end;
end;

var
aa:integer;
th2:LongWord;
begin
aa:=10;
begin
thread(nil,1024,@Test,@aa,0,th2);
application.MessageBox(pchar('aa:'+inttostr(aa)),'aaa',mb_ok);
end;
 
H

hgptm

Unregistered / Unconfirmed
GUEST, unregistred user!
多謝!
多謝!
太感謝了!
 
顶部