Subject:
关于TCnTimer中弹出窗口的问题
[Print This Page]
Author:
old_cnpack
Time:
2008-9-4 00:44
Subject:
关于TCnTimer中弹出窗口的问题
问题说明:
? ???在form1中放置一个TCnTimer,onTimer时,弹出form2。
? ???单击form2中的按钮 关闭form2后,form1 无响应。
? ?? ?经测试,使用delphi自带的timer无此问题。
代码:
unit Unit1;
interface
uses
??Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
??Dialogs, CnClasses, CnTimer, StdCtrls, ExtCtrls;
type
??TForm1 = class(TForm)
? ? btn1: TButton;
? ? ct1: TCnTimer;
? ? procedure btn1Click(Sender: TObject);
? ? procedure ct1Timer(Sender: TObject);
??private
? ? { Private declarations }
??public
? ? { Public declarations }
??end;
var
??Form1: TForm1;
implementation
uses unit2;
{$R *.dfm}
procedure TForm1.btn1Click(Sender: TObject);
begin
??Form1.ct1.Enabled := True;
end;
procedure TForm1.ct1Timer(Sender: TObject);
begin
? ? Form2.ShowModal;
end;
end.
[
本帖最后由 old_cnpack 于 2008-9-4 00:58 编辑
]
Author:
zjy
Time:
2008-9-4 10:08
Subject:
这个是CnTimer的设计问题
因为CnTimer内部使用MMSystem的多媒体定时器来定时,而多媒体定时器是在单独的线程中跑的,如果在定时器事件中操作VCL控件和窗体,就会因为VCL本身不支持多线程而导致错误。
CnTimer仅用于需要高精度定时的场合,使用时需要由应用程序进行线程安全处理。
Welcome to CnPack Forum (http://bbs.cnpack.org/)
Powered by Discuz! 5.0.0