就我现在知道创建线程(暂时只说单线程)的方法有2个。
1、首先当然是打开你的delphi 6 ,点取菜单栏中的文件-新建-其它,弹出一个标签窗口,选取new标签,然后找到Thread Object,就是它了,双击它就行了,弹出一个类命名窗口,输入mythread,当然名称可由你自已来定的。这时程序自动创建一个unit2,在这个里面编写
procedure mythread.Execute;
begin
{ Place thread code here }
end;
然后在unit1里面引用thread的这个单元,mythread.Create(false);就可以执行拉。2、另外一个方法是写一个函数
//这是线程函数,
它可以放在下面程序的任何地方
function MyThreadFunc(P:pointer):Longint;stdcall;
var
i:integer;
DC:HDC;
S:string;
begin
DC:=GetDC(Form1.Handle);
for i:=0 to 100000 do begin
S:=Inttostr(i);
Textout(DC,10,10,Pchar(S),length(S));
end;
ReleaseDC(Form1.Handle,DC);
end;然后一个按钮或者其他触发
procedure TForm1.UsedThreadClick(Sender: TObject);
var
hThread:Thandle;//定义一个句柄
ThreadID:DWord;
begin
//创建线程,同时线程函数被调用
hthread:=CreateThread(nil,0,@MyThreadfunc,nil,0,ThreadID);
if hThread=0 then
messagebox(Handle,'Didn’t Create a Thread',nil,MB_OK);
end;==================================================================
我的问题如下:
两种方法有什么区别啊?大家可以讨论一下。谢谢!!!
1、首先当然是打开你的delphi 6 ,点取菜单栏中的文件-新建-其它,弹出一个标签窗口,选取new标签,然后找到Thread Object,就是它了,双击它就行了,弹出一个类命名窗口,输入mythread,当然名称可由你自已来定的。这时程序自动创建一个unit2,在这个里面编写
procedure mythread.Execute;
begin
{ Place thread code here }
end;
然后在unit1里面引用thread的这个单元,mythread.Create(false);就可以执行拉。2、另外一个方法是写一个函数
//这是线程函数,
它可以放在下面程序的任何地方
function MyThreadFunc(P:pointer):Longint;stdcall;
var
i:integer;
DC:HDC;
S:string;
begin
DC:=GetDC(Form1.Handle);
for i:=0 to 100000 do begin
S:=Inttostr(i);
Textout(DC,10,10,Pchar(S),length(S));
end;
ReleaseDC(Form1.Handle,DC);
end;然后一个按钮或者其他触发
procedure TForm1.UsedThreadClick(Sender: TObject);
var
hThread:Thandle;//定义一个句柄
ThreadID:DWord;
begin
//创建线程,同时线程函数被调用
hthread:=CreateThread(nil,0,@MyThreadfunc,nil,0,ThreadID);
if hThread=0 then
messagebox(Handle,'Didn’t Create a Thread',nil,MB_OK);
end;==================================================================
我的问题如下:
两种方法有什么区别啊?大家可以讨论一下。谢谢!!!
解决方案 »
- 写了2个函数,大家帮看看效率有没有哪里可以提升的
- 那位帮解释一下TConversion类有什么用处(在线)?
- 关于Data Module 的问题
- 做房屋租赁管理系统时碰到的一个问题,请高手指点一下,谢谢
- 菜鸟提问:程序打包发布问题(sql server 2000+bde+多层) 使用installshield express
- 困惑,制作一个简单的计算器之二
- 在线等!如何将一幅图像保存到内存里??
- 父窗体与子窗体问题
- 各位,救救我吧,我有一个locate的语句问题
- socket问题?????
- 如何计算两个时间Tdatetime之间相隔多少天?
- 领导要我把他做的组件做成activeX控件,又碰见问题了,大家帮忙看看!
var
i:integer;
DC:HDC;
S:string;
begin
DC:=GetDC(Form1.Handle);
for i:=0 to 100000 do begin
S:=Inttostr(i);
Textout(DC,10,10,Pchar(S),length(S));
if i=5000 then
begin
ReleaseDC(Form1.Handle,DC);
exit; //请问这里结束函数,同时线程就结束了么????还是有其他方法
end;
end;
ReleaseDC(Form1.Handle,DC);
end;
对,线程就结束了!
DLL中的函数直接调用就OK
如你上面的例子,GetDC实际上就是操作系统的GDI32.dll里面的函数