1.
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TMyThread = class(TThread)
private
str: String;
protected
procedure Execute; override;
procedure Updt;
public
constructor Create;
destructor Destroy; override;
end;
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
FMyThread: TMyThread;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TMyThread }
constructor TMyThread.Create;
begin
FreeOnTerminate:=True;
inherited Create(False);
end;
destructor TMyThread.Destroy;
begin
Form1.FMyThread:=nil;
inherited Destroy;
end;
procedure TMyThread.Execute;
begin
str:='begin';
// в Label1 записываем текст в синхронизированом вызове Updt
Synchronize(Updt);
// крутим цикл пока не послан сигнал Terminate
while not Terminated do
begin
Sleep(100);
str:=IntToStr(GetTickCount div 100);
// в Label1 записываем текст в синхронизированом вызове Updt
Synchronize(Updt);
end;
str:='end';
// в Label1 записываем текст в синхронизированом вызове Updt
Synchronize(Updt);
end;
procedure TMyThread.Updt;
begin
// этот метод вызывается в основном потоке VLC
// в Label1 записываем текст
Form1.Label1.Caption:=str;
end;
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
begin
// создаем поток
if not Assigned(FMyThread) then FMyThread:=TMyThread.Create;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
// приостанавливаем выполнение
if Assigned(FMyThread) then FMyThread.Suspend;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
// возобновляем выполнение
if Assigned(FMyThread) then FMyThread.Resume;
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
// прерываем выполнение
if Assigned(FMyThread) then FMyThread.Terminate;
end;
end.
2. грубо читать данные из TMemo (и вообще любого другого если пользователь во время работы не изменяет данные) можно и не в Synchronize, но писать лучше в Synchronize. тут проблема еще в отображении может быть. например windows отрисовывает progressbar, когда поток в нем меняет что-то, на экране может смотреться не красиво.