我的程序建立一个线程可是一调用就出错,各位给点灵感,delphi_han(小强),你有例子么,参考参考!!!
解决方案 »
- 祝哈欠老大生日快乐 嘿嘿
- 求Delphi7管理信息系统达人帮忙做毕业设计,急,南京市最好,有酬劳
- 函数怎样传一个数组参数呢???????????
- BatchMove控件 把數據倒入到 VFP裏面,怎麽會把VFP的表的欄位 結構給該了??很是着急!!高手指點!
- (高手请进,关于dll的编写...)
- 我用QuickRep控件,不用Query控件连接,怎么才能通过循环自己控制报表打印?
- 200分!up的都有分,怎么下载这样的文件?
- 请问在DELPHI中怎么编译发行版啊?
- 刚才问错了!我想问如何在TStringGrid里的cell里使用其他控件!如ComboBox.
- 紧急求助,关于TREEVIEW的使用,高手们,路过了帮我看看。
- 请推荐几本比较好的Delphi入门书
- *****dbgrid控件问题,价值30分******
姓韩
---- (1) 创 建 一 个 线 程。
---- (2) 创 建 一 个 能 作 为 线 程 入 口 的 函 数。
---- Windows API 调 用CreateThread 函 数 来 创 建 一 个 线 程。 函 数 如 下:
HANDLE CreateThread(LPSECURITY_
ATTRIBUTES lpThreadAttributes,
//线程安全属性地址
DWORD dwStackSize,
//初始化线程堆栈尺寸
LPTHREAD_START_ROUTINE lpStartAddress,
//线程函数所指向的地址
LPVOID lpParameter,
//给线程函数传递的参数
DWORD dwCreationFlags,
//有关线程的标志
LPDWORD lpThreadId
//系统分配给线程的ID
);
---- 第 一 个 参 数 是 安 全 属 性, 一 般 设 为nil, 使 用 缺 省 的 安 全 属 性。 当 我 们 想 此
线 程 有 另 外 的 子 进 程 时, 可 改 变 它 的 属 性。
---- 第 二 个 参 数 是 线 程 堆 栈 尺 寸, 一 般 设 为0, 表 示 与 此 应 用 的 堆 栈 尺 寸 相
同, 即 主 线 程 与 创 建 的 线 程 一 样 长 度 的 堆 栈。 并 且 其 长 度 会 根 据 需 要 自 动
变 长。
---- 第 三 个 参 数, 也 是 最 重 要 的 一 个, 是 一 个 指 向 函 数 名 的 指 针, 但 传 递 时
很 简 单, 只 需 在 线 程 函 数 名 前 加 上@ 就 可 以 了。
---- 第 四 个 参 数 是 你 需 要 向 线 程 函 数 传 递 的 参 数, 一 般 是 一 个 指 向 结 构 的 指
针。 不 需 传 递 参 数 时, 则 这 个 参 数 设 为nil。
---- 第 五 个 参 数, 传 入 与 线 程 有 关 的 一 些 标 志, 如 果 是CREATE_SUSPENDED, 则 创 建
一 个 挂 起 的 线 程, 即 这 个 线 程 本 身 已 创 建, 它 的 堆 栈 也 已 创 建。 但 这 个 线
程 不 会 被 分 配 给CPU 时 间, 只 有 当ResumeThread 函 数 被 调 用 后 才 能 执 行; 当 然,
也 可 以 调 用SuspendThread 函 数 再 次 挂 起 线 程。 要 是 标 志 为0, 那 么 一 旦 建 立 线
程, 线 程 函 数 就 被 立 即 调 用。 一 般 传 为0 即 可。
---- 最 后 一 个 参 数 是 系 统 分 配 给 这 个 线 程 的 唯 一 的ID 标 志。
---- 下 面 这 个 程 序MyThreadPro.pas 介 绍 了 线 程 如 何 建 立 及 使 用:
//Your first test Thread Program.
unit MyThreadPro;
interface
uses
Windows, Messages, SysUtils, Classes,
Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
UsedThread: TButton;
NoUsedThread: TButton;
procedure UsedThreadClick(Sender: TObject);
procedure NoUsedThreadClick(Sender: TObject);
var
Form1: TForm1;
implementation
{$R *.DFM}
//这是线程函数,
它可以放在下面程序的任何地方
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;
procedure TForm1.NoUsedThreadClick(Sender: TObject);
begin
MyThreadfunc(nil);
//没有创建线程时,直接调用线程函数
end;
end.