哎,Csdn挺需要你这样的热心人,我等到花儿谢了由开都没人气,再过5分钟结账
解决方案 »
- 判断服务是否安装的问题
- 关于combobox 下拉列表的问题(在自己的电脑上可以显示,在别的就不行)
- 请教,如何将TStringGrid中的内容复制出来?
- 丽娜帖:请问怎么检测一个eidt框是否在被编辑
- 如何在程序中卸载U盘?
- 菜鸟提问:程序打包发布问题(sql server 2000+bde+多层) 使用installshield express
- 关于release和free的问题?
- 各位老大,怎么在Delphi中调用选择目录对话框呀?
- 我在程序中处理异常的时候为什么总是先是出系统的错误信息才是我自己设置的错误信息啊??
- Grid index out of range错误怎么回事?急急急急!!!
- 巨菜问题:ahm或faltstyle的hint控件怎么用?
- 小弟errun在这里给各位前辈陪不是了
3.多client ,socket服务程序
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ComCtrls;type
TLabelCounterThread = Class (TThread)
private
{ Private declarations }
FLabel:TLabel;
FNumber:integer;
FIdx:integer;
Procedure RefreshLabel;
protected
Procedure Execute;Override;
public
{ Public declarations }
Constructor Create(lbl:TLabel;num:integer);
end; TListCounterThread = Class (TThread)
private
{ Private declarations }
FList:TListBox;
FNumber:integer;
Fidx:integer;
Procedure ClearList;
Procedure RefreshList; Protected
Procedure Execute;Override; public
{ Public declarations }
Constructor Create(lst:TListBox;num:integer);
end;
TfrmMain = class(TForm)
cmdThread1: TButton;
cmdThread2: TButton;
Label1: TLabel;
Label2: TLabel;
cmdKillThread1: TButton;
cmdKillThread2: TButton;
ListBox1: TListBox;
cmdThread3: TButton;
cmdKillThread3: TButton;
procedure cmdThread1Click(Sender: TObject);
procedure cmdThread2Click(Sender: TObject);
procedure cmdKillThread1Click(Sender: TObject);
procedure cmdKillThread2Click(Sender: TObject);
procedure cmdThread3Click(Sender: TObject);
procedure cmdKillThread3Click(Sender: TObject);
private
{ Private declarations }
Procedure Thread1Done(Sender : TObject);
Procedure Thread2Done(Sender : TObject);
Procedure Thread3Done(Sender : TObject);
public
{ Public declarations }
Test1,Test2:TLabelCounterThread;
Test3:TListCounterThread;
end;var
frmMain: TfrmMain;implementation{$R *.DFM}
Constructor TLabelCounterThread.Create(lbl:TLabel;num:integer);
begin
inherited Create(False);
FNumber:=num;
if FNumber>10000 then FNumber:=10000;
if FNumber<1 Then FNumber:=1;
FLabel:=lbl;
FreeOnTerminate:=True;
end;Procedure TLabelCounterThread.RefreshLabel;
begin
FLabel.Caption:=IntToStr(Fidx);
end;Procedure TLabelCounterThread.Execute;
var
idx:integer;
begin
for idx:=1 to FNumber do begin
Fidx:=idx;
synchronize(RefreshLabel);
if Terminated then Exit;
end;
end;Constructor TListCounterThread.Create(lst:TListBox;num:integer);
begin
inherited Create(False);
FNumber:=num;
if FNumber>10000 then FNumber:=10000;
if FNumber<1 Then FNumber:=1;
Flist:=lst;
FreeOnTerminate:=True;
end;Procedure TListCounterThread.ClearList;
begin
FList.Items.Clear;
end;Procedure TListCounterThread.RefreshList;
begin
FList.Items.Add (IntToStr(Fidx));
end;Procedure TListCounterThread.Execute;
var
idx:integer;
begin
synchronize(ClearList);
for idx:=1 to FNumber do begin
Fidx:=idx;
synchronize(RefreshList);
if Terminated then Exit;
end;
end;procedure TfrmMain.cmdThread1Click(Sender: TObject);
begin
cmdThread1.Enabled:=False;
cmdKillThread1.Enabled:=True;
test1:=TLabelCounterThread.Create(frmMain.Label1,10000);
test1.OnTerminate:=Thread1Done;
end;Procedure TfrmMain.Thread1Done;
begin
cmdKillThread1.Enabled:=False;
cmdThread1.Enabled:=True;
end;Procedure TfrmMain.Thread2Done;
begin
cmdKillThread2.Enabled:=False;
cmdThread2.Enabled:=True;
end;Procedure TfrmMain.Thread3Done;
begin
cmdKillThread3.Enabled:=False;
cmdThread3.Enabled:=True;
end;procedure TfrmMain.cmdThread2Click(Sender: TObject);
begin
cmdThread2.Enabled:=False;
cmdKillThread2.Enabled:=True;
test2:=TLabelCounterThread.Create(frmMain.Label2,10000);
test2.OnTerminate:=Thread2Done;
end;procedure TfrmMain.cmdKillThread1Click(Sender: TObject);
begin
Test1.Terminate;
end;procedure TfrmMain.cmdKillThread2Click(Sender: TObject);
begin
Test2.Terminate;
end;procedure TfrmMain.cmdThread3Click(Sender: TObject);
begin
cmdThread3.Enabled:=False;
cmdKillThread3.Enabled:=True;
test3:=TListCounterThread.Create(frmMain.ListBox1,10000);
test3.OnTerminate:=Thread3Done;
end;procedure TfrmMain.cmdKillThread3Click(Sender: TObject);
begin
Test3.Terminate;
end;end.
能举出我没给问题的例子吗?