多线程快速操作tmemo时,乱码
MMas 2009-12-04 05:35:18 unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type
MyThread = class(TThread)
Fstr : string;
FMemo : TMemo;
constructor create(memo : TMemo; str : string);
procedure Execute; override;
end;
var
Form1: TForm1;
flag : boolean;
implementation
{$R *.dfm}
constructor MyThread.create(memo : TMemo; str : string);
begin
inherited create(true);
FreeOnTerminate := true;
FStr := str;
FMemo := Memo;
//Resume;
end;
procedure MyThread.Execute;
begin
while flag do Fmemo.Lines.Add(FStr);
sleep(1);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
MyTh : MyThread;
begin
flag := true;
MyTh := MyThread.create(self.Memo1, 'aaaaaaaaaaaaa');
myth.Resume;
MyTh := MyThread.create(self.Memo1, 'bbbbbbbbbbbbb');
myth.Resume;
MyTh := MyThread.create(self.Memo1, 'ccccccccccccc');
myth.Resume;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
flag := false;
end;
end.
以上代码测试时,MEMO滚动条设为BOTH,运行中,用鼠标向上选择里面的内容,有时就会出现添加行乱了。
我需要在多线程中向MEMO添加或更改行,在我的程序里,我在主线程和其它创建的线程中都使用同一个TCRITICALSECTION或MUTEX,但是还是在MEMO操作时乱了,有什么办法解决啊?我使用的是D6