function vfun(ir: Pointer): integer; stdcall;
var
k, t, m, i,lk: integer;
ss: string;
lpwd, luserid, pass: pchar;begin
for m := 1 to 100 do
begin ss := inttostr(m);// 程序发生异常,注释此句就正常,什么原因啊。
end;end;function MyThreadFun(p: Pointer): Integer; stdcall;begin
vfun(p);
Result := 0;
end;procedure TForm1.Button1Click(Sender: TObject);
var
ID: DWORD;
st: array[0..9] of integer;
ii: integer;
begin
for ii := 0 to 9 do
begin
st[ii] := ii;
hThread[ii] := CreateThread(nil, 0, @MyThreadFun, @st[ii], 0, ID);
end;
// Button1.Enabled := False;
end;
var
k, t, m, i,lk: integer;
ss: string;
lpwd, luserid, pass: pchar;begin
for m := 1 to 100 do
begin ss := inttostr(m);// 程序发生异常,注释此句就正常,什么原因啊。
end;end;function MyThreadFun(p: Pointer): Integer; stdcall;begin
vfun(p);
Result := 0;
end;procedure TForm1.Button1Click(Sender: TObject);
var
ID: DWORD;
st: array[0..9] of integer;
ii: integer;
begin
for ii := 0 to 9 do
begin
st[ii] := ii;
hThread[ii] := CreateThread(nil, 0, @MyThreadFun, @st[ii], 0, ID);
end;
// Button1.Enabled := False;
end;
解决方案 »
- 网页效果问题
- 用Sql 语句求字段(一列)和, 但是....... 如下:
- 在图片上放一个Label实现超链接的效果,出现的问题?请高手指点
- 释放Dll后,是否一定要关闭数据连接
- 关于广播消息的问题(讨论)
- 请问外键的含义?
- Intraweb6.0.19了出来了,改进较6.0.15很多,有没有CRACK好的?原CRACK可用吗?
- 用delphi做组件是如何和asp进行交互的呢?(能给段简单的代码看看么?)
- help!100分
- 想问各位(在北京的)都使用什么开发具?请注明工作地点。
- delphi 连接远程 OPC server 问题
- 用delphi进行串口编程时 出现error reading comm device错误
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
procedure FormDestroy(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
hMutex:THandle;
implementation{$R *.dfm}
function vfun(ir: Pointer): integer; stdcall;
var
k, t, m, i,lk: integer;
ss: string;
lpwd, luserid, pass: pchar;
begin
for m := 1 to 100 do
begin
ss := inttostr(m);// 程序发生异常,注释此句就正常,什么原因啊。
end;
end;function MyThreadFun(p: Pointer): Integer; stdcall;
begin
vfun(p);
Result := 0;
end;procedure TForm1.FormDestroy(Sender: TObject);
begin
CloseHandle(hMutex);
end;procedure TForm1.FormCreate(Sender: TObject);
begin
hMutex:=CreateMutex(nil,false,nil);
end;procedure TForm1.Button1Click(Sender: TObject);
var
ID: DWORD;
st: array[0..9] of integer;
hThread: array[0..9] of integer;
ii: integer;
begin
for ii := 0 to 9 do
begin
WaitForSingleObject(hMutex,INFINITE) ;
st[ii] := ii;
hThread[ii] := CreateThread(nil, 0, @MyThreadFun, @st[ii], 0, ID);
ReleaseMutex(hMutex);
end;
// Button1.Enabled := False;
end;
end.
IsMultiThread := True;像这样:
program Project1;uses
Forms,
Unit1 in 'Unit1.pas' {Form1};{$R *.res}begin
IsMultiThread := True;
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
功能如下,一个按钮,两个label。使用多线程,使一个label显示1 to 1000,同时使另一个label显示1000 to 2000头疼死了,高手帮帮忙啊。
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
var
CS:TRTLCriticalSection;
type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
Label2: TLabel;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
//定义线程类
type
tyThread = class(TThread)
private
Str: string;
i1,i2:integer;
protected procedure showLabel;
procedure Execute; override;
public
LLabel: TLabel;
end;var
Form1: TForm1;
SArrayLabel: Array [0..1] of TLabel;implementation{$R *.dfm}
//线程类实现部分procedure tyThread.Execute;
var
m: integer;begin
//EnterCriticalSection(Cs); //进入临界段 for m := i1 to i2 do
begin
sleep(5);
str := inttostr(m);
synchronize(showLabel); //同步访问VCL可视组件
end;
//LeaveCriticalSection(Cs); //退出临界段
end;procedure TyThread.showLabel;
begin
LLabel.caption:=str;
//Application.ProcessMessages;end;procedure TForm1.Button1Click(Sender: TObject);
var
th:array[0..1] of TyThread;
ii:integer;
begin
//Listbox1.Clear;
//Listbox2.Clear;
for ii:= 0 to 1 do
begin
th[ii] := tyThread.Create(true); //创建线程1
th[ii].LLabel := SArrayLabel[ii];
th[ii].i1:=ii*1000;
th[ii].i2:=ii*1000+1000;
th[ii].Resume; //开始执行 end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
InitializeCriticalSection(Cs);
SArrayLabel[0] := Label1;
SArrayLabel[1] := Label2;end;procedure TForm1.FormDestroy(Sender: TObject);
begin
DeleteCriticalSection(Cs) ;end;end.
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
var
CS:TRTLCriticalSection;
type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
Label2: TLabel;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
//定义线程类
type
tyThread = class(TThread)
private
Str: string;
i1,i2:integer;
protected procedure showLabel;
procedure Execute; override;
public
LLabel: TLabel;
end;var
Form1: TForm1;
SArrayLabel: Array [0..1] of TLabel;implementation{$R *.dfm}
//线程类实现部分procedure tyThread.Execute;
var
m: integer;begin
//EnterCriticalSection(Cs); //进入临界段 for m := i1 to i2 do
begin
sleep(5);
str := inttostr(m);
synchronize(showLabel); //同步访问VCL可视组件
此处调用dll函数,程序只能启动了一个线程了。
end;
//LeaveCriticalSection(Cs); //退出临界段
end;procedure TyThread.showLabel;
begin
LLabel.caption:=str;
//Application.ProcessMessages;end;procedure TForm1.Button1Click(Sender: TObject);
var
th:array[0..1] of TyThread;
ii:integer;
begin
//Listbox1.Clear;
//Listbox2.Clear;
for ii:= 0 to 1 do
begin
th[ii] := tyThread.Create(true); //创建线程1
th[ii].LLabel := SArrayLabel[ii];
th[ii].i1:=ii*1000;
th[ii].i2:=ii*1000+1000;
th[ii].Resume; //开始执行 end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
InitializeCriticalSection(Cs);
SArrayLabel[0] := Label1;
SArrayLabel[1] := Label2;end;procedure TForm1.FormDestroy(Sender: TObject);
begin
DeleteCriticalSection(Cs) ;end;end.