新手学习,100分求下面多线程效果的代码。 (在网上搜索了一堆多线程的学习教程,越看越糊涂,想先找个例子来入下门)用多线程的方式,在窗体的Memo控件上增加1-100个数字行(每行一个数字,不重复),每次最多有5个同时运行的线程。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你造一个线程,然后创建5个去填充memo就是了 为啥要启动第6个,线程可以循环执行的啊unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ASGSQLite3, StdCtrls, DB;type TNumThread = class(TTHread) private FNum: Integer; procedure Execute; override; procedure ShowData; public ThreadNo: Integer; end;var lineCount: Integer; type TForm1 = class(TForm) Memo1: TMemo; Button5: TButton; procedure FormCreate(Sender: TObject); procedure Button5Click(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);begin end;procedure TNumThread.ShowData;begin Form1.Memo1.lines.Add(IntToStr(FNum) + ' ' + IntToStr(ThreadNo));end;procedure TNumThread.Execute;begin inherited; FreeOnTerminate := True; while lineCount < 10000 do begin InterlockedIncrement(lineCount); FNum := lineCount; // 同步 Synchronize(ShowData); end;end;procedure TForm1.Button5Click(Sender: TObject);var numThread:array [0..4] of TNumThread ; I: Integer;begin memo1.Clear ; lineCount := 0; for I := 0 to 4 do begin numThread[I] := TNumThread.Create(True); numThread[I].ThreadNo := I; numThread[I].Resume ; end;end;end. #6 用了 InterlockedIncrement(lineCount);怎么没有Decrement?(具体名字忘记了)反正就是一个标示inc,一个表示dec还有既然用了Synchronize(ShowData);不晓得,Memo.Lines有没有Lock和UnLock,保护一下。 为什么我用6楼的代码会报:Undeclared identifier: 'InterlockedIncrement'我已经引用了"sysutils"单元啊? InterlockedIncrement是原子操作,不需要lock的 uses Windows;InterlockedIncrement在windows这个单元中 隆重庆祝本人排名进入10000名。散分200 请问dngrideh如何在鼠标点击一下时就进入编辑状态,如何在输入内容后不用按回车就保存输入内容阿 DTS的问题! 怎样从Ini文件中读取数椐 这个问题困饶我好长时间了55555 请教(都来看一看) ???为什么我的Delphi中的DataSet组件都是只读的??? 哪有FASTREPORT 2.4 for delphi6下载,100分相送。 怎么样保证应用程序不能重复启动。 100分赠送,等你来拿!!!! 请教高手怎么将简体汉字转成繁体汉字?如把 '电' 转成 '電'. 我的工程管理器老提示错误! 请教下Delphi能调用MFC写的导出类吗?
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ASGSQLite3, StdCtrls, DB;type
TNumThread = class(TTHread)
private
FNum: Integer;
procedure Execute; override;
procedure ShowData;
public
ThreadNo: Integer;
end;var
lineCount: Integer;
type
TForm1 = class(TForm)
Memo1: TMemo;
Button5: TButton;
procedure FormCreate(Sender: TObject);
procedure Button5Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
begin
end;
procedure TNumThread.ShowData;
begin
Form1.Memo1.lines.Add(IntToStr(FNum) + ' ' + IntToStr(ThreadNo));
end;
procedure TNumThread.Execute;
begin
inherited;
FreeOnTerminate := True;
while lineCount < 10000 do
begin
InterlockedIncrement(lineCount);
FNum := lineCount;
// 同步
Synchronize(ShowData);
end;
end;
procedure TForm1.Button5Click(Sender: TObject);
var
numThread:array [0..4] of TNumThread ;
I: Integer;
begin
memo1.Clear ;
lineCount := 0;
for I := 0 to 4 do
begin
numThread[I] := TNumThread.Create(True);
numThread[I].ThreadNo := I;
numThread[I].Resume ;
end;
end;end.
InterlockedIncrement(lineCount);
怎么没有Decrement?(具体名字忘记了)
反正就是一个标示inc,一个表示dec
还有既然用了Synchronize(ShowData);
不晓得,Memo.Lines有没有Lock和UnLock,保护一下。
Undeclared identifier: 'InterlockedIncrement'
我已经引用了"sysutils"单元啊?
Windows;
InterlockedIncrement在windows这个单元中