CnPack Forum


 
Subject: 关于TCnTimer中弹出窗口的问题
old_cnpack
新警察
Rank: 1



UID 40849
Digest Posts 0
Credits 22
Posts 8
点点分 22
Reading Access 10
Registered 2008-8-30
Status Offline
Post at 2008-9-4 00:44  Profile | Blog | P.M. 
关于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 编辑 ]
Top
zjy
管理员
Rank: 9Rank: 9Rank: 9



UID 2
Digest Posts 6
Credits 2385
Posts 1543
点点分 2385
Reading Access 102
Registered 2002-12-16
Location China
Status Offline
Post at 2008-9-4 10:08  Profile | Site | Blog | P.M. 
这个是CnTimer的设计问题

因为CnTimer内部使用MMSystem的多媒体定时器来定时,而多媒体定时器是在单独的线程中跑的,如果在定时器事件中操作VCL控件和窗体,就会因为VCL本身不支持多线程而导致错误。

CnTimer仅用于需要高精度定时的场合,使用时需要由应用程序进行线程安全处理。




Zhou JingYu
CnPack Administrator
http://www.cnpack.org/
Top
 




All times are GMT++8, the time now is 2024-11-22 19:27

    本论坛支付平台由支付宝提供
携手打造安全诚信的交易社区 Powered by Discuz! 5.0.0  © 2001-2006 Comsenz Inc.
Processed in 0.008923 second(s), 9 queries , Gzip enabled

Clear Cookies - Contact Us - CnPack Website - Archiver - WAP