Board logo

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