怎么向createthread或begincreate传递函数的参数值?
用createthread或begincreate可以开始一个线程!其中第三个参数是线程函数,第四个参数是向这个线
程函数传递的参数的指针!我用它传递时并不起作用的!
谁能给我一个例子,即用createthread呀begincreate制造一个线程的同时,就给线程函数传递参数!
问题点数:20、回复次数:5Top
1 楼sleeepboy(阿闲)回复于 2002-05-25 09:55:11 得分 5
procedure asdfa;
begin
end;
tid: Cardinal;
BeginThread(nil, 0, @asdfa, nil, 0, tid);就ok了 用不着CreateThread
另外 为什么不用Delphi封装的TThread呢 多方便 还比较容易控制同步问题Top
2 楼yansea(思宏)回复于 2002-05-25 09:56:00 得分 15
const
Margin = 20;
type
PData = ^TData;
TData = record
XPos: Integer;
YPos: Integer;
end;
______________________________________________________
function ThreadFunc(Ptr: Pointer): LongInt; stdcall;
var
i, j: Integer;
P: TColorRef;
DC: HDC;
Data: PData;
begin
Data := PData(Ptr);
DC := GetDC(Form1.Handle);
for j := 0 to AHeight do
for i := Margin to AWidth + Margin do begin
P := GetPixel(DC, i, j);
SetPixel(DC, i + Data^.Xpos, Data^.YPos + j, P);
end;
ReleaseDC(Form1.Handle, DC);
Dispose(Data);
end;
____________________________________________________
procedure TForm1.StartMenu(Sender: TObject);
var
hThread1, hThread2, hThread3: THandle;
ThreadID: DWORD;
Data: PData;
begin
New(Data);
Data^.xPos := AWidth;
Data^.YPos := 0;
hThread1 := CreateThread(nil, 0, @ThreadFunc,
Data, 0, ThreadID);
New(Data);
Data^.xPos := 0;
Data^.YPos := AHeight;
hThread2 := CreateThread(nil, 0, @ThreadFunc,
Data, 0, ThreadID);
New(Data);
Data^.xPos := AWidth;
Data^.YPos := AHeight;
hThread3 := CreateThread(nil, 0, @ThreadFunc,
Data, 0, ThreadID);
if ((hTHread1 = 0) or (hThread2 = 0) or (hThread3 = 0)) then
MessageBox(Handle, 'No Thread!', nil, mb_Ok);
end;
我把关键的地方贴出来了,你看看吧Top
3 楼chenzhenjian()回复于 2002-05-26 11:47:00 得分 0
原来是我的stdcall关键字没有写的!Top
4 楼iivv(让delphi去死!只要我还活着~~~)回复于 2002-05-26 12:28:17 得分 0
用Delphi封装的TThread有时候碰到一些麻烦,,,觉得还没直接调用API好,比那个灵活多了Top
5 楼dedema(思想恐龙)回复于 2002-05-29 23:02:34 得分 0
对不起。。。
我结了几次帐都有问题!
我再试试看!Top




