在主线程中,定义一个threadtmp: TTreadXXX全局线程对象;创建一个线程时,把主线程中的一个VCL控件的句柄传入线程中,在线程中给VCL控件写数据,这里是否要加Synchronize进行同步,如果加了这个同步,就会出现主线程一直等待,这样线程就起不到作用。请问如何解决线程对主线程中的一个VCL控件写数据时,主线程又能正常运行?
解决方案 »
- 如何获得局域网中和每台计算机的计算机名啊.急!
- 错在那啦??
- 特急,OCX中无法动态创建Frame,提供故障演示代码,希望给出解决方法
- 请问如何读取文本文件里的数据
- 我用DELPHI在本地做了一个小程序,功能中要用到数据库(ACCESS),而该数据库又放在INTERNET上,我能否让该程序和ACCESS相连,如何做?
- 如何调试多线程的程序?
- 怎样在TWebBrowser的OnNewWindow事件里得到即将转入的URL?
- 自定义的类的问题,继承自Tolecontrol
- 取分钟的问题
- 小弟写一个多线程的服务程序,但每次在停止该服务时会出现异常出错,不知为何?
- Dll怎么调用.
- treeview中如何给当前选中的节点增加一个子结点?
不会吧?代码贴出来看看
可以用SendMessage()或PostMessage()来发送消息
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;Type
TForm1 = Class(TForm)
Edit1: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
End;
TTestThread = Class(TThread)
private
count: integer;
public
Procedure getcount;
Procedure execute; override;
End;
Var
Form1 : TForm1;Implementation{$R *.dfm}{ TTestThread }Procedure TTestThread.execute;
Var
i : integer;
Begin
Inherited;
FreeOnTerminate:=true;
For i := 1 To 10000000 Do
Begin
if Terminated then break;
inc(count);
Synchronize(getcount);
End;
End;Procedure TTestThread.getcount;
Begin
form1.edit1.Text := inttostr(count);
End;procedure TForm1.Button1Click(Sender: TObject);
var mythread:TTestThread;
begin
mythread:=TTestThread.Create(false);
end;End.