我正在处理的Delphi应用程序必须延迟一秒或有时两秒钟.我想使用最佳实践来编制此延迟.在阅读关于stackoverflow的Delphi的Sleep()方法的条目时,我发现了这两条注释:
我遵循这句格言:"如果你觉得需要使用Sleep(),那你做错了." - Nick Hodges 12年12月12日1:36
@nick确实.我的等价物是"没有问题,睡眠是解决方案." - David Heffernan 12年12月12日8:04
为响应这个建议以避免调用Sleep(),以及我对使用Delphi的TTimer和TEvent类的理解,我编写了以下原型.我的问题是:
type
TForm1 = class(TForm)
Timer1: TTimer;
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
public
EventManager: TEvent;
end;
TDoSomething = class(TThread)
public
procedure Execute; override;
procedure Delay;
end;
var
Form1: TForm1;
Something: TDoSomething;
implementation
{$R *.dfm}
procedure TDoSomething.Execute;
var
i: integer;
begin
FreeOnTerminate := true;
Form1.Timer1.Interval := 2000; // 2 second interval for a 2 second delay
Form1.EventManager := TEvent.Create;
for i := 1 to 10 …Run Code Online (Sandbox Code Playgroud) 我在Visual Studio 2012中使用限制版本的Install Shield创建了一个安装程序.
我有一个数字证书,我想添加到安装程序.
我想使用Install Shield的SingleImage功能创建并向我的客户提供单个安装文件(例如setup.exe).但是,似乎我必须通过Install Shield将数字证书附加到一个msi文件中,该文件嵌入在setup.exe中.
我发现在运行安装程序时,将数字证书放在setup.exe上会导致告知用户发布者是未知的.如果换句话说,那就是没有正确部署数字证书.
我可以访问msi文件以向其添加数字证书吗?如果是这样,怎么样?
关于TEvent的Delphi XE2文档说明了这一点:
有时,您需要等待线程完成某些操作,而不是等待特定线程完成执行.为此,请使用事件对象.应使用全局范围创建事件对象(System.SyncObjs.TEvent),以便它们可以像所有线程可见的信号一样工作.
当线程完成其他线程所依赖的操作时,它会调用TEvent.SetEvent.SetEvent打开信号,因此任何其他检查的线程都会知道操作已完成.要关闭信号,请使用ResetEvent方法.
例如,考虑一种情况,您必须等待多个线程才能完成执行而不是单个线程.因为您不知道哪个线程最后会完成,所以您不能简单地使用其中一个线程的WaitFor方法.相反,您可以让每个线程在完成时递增一个计数器,并让最后一个线程信号通过设置事件来完成它们.
但是,Delphi文档没有解释另一个线程如何检测到调用了TEvent.Set事件.你能解释一下如何检查TEvent.Set是否被调用?
我想为TDateTime变量添加秒,以便结果是分钟的顶部.例如,如果是08:30:25,我想将TDateTime变量存储为08:31:00.
我看到它TDateTime有一个Decode函数,我可以使用它.但是,没有一个编码函数可以将更改的时间放回到TDateTime变量中.
我在Delphi XE2上安装TurboPower Orpheus.我从sourceforge.net获得了Orpheus.Delphi XE2的Orpheus版本有四个Borland Package Libaries(BPL):O408_r160.bpl,O408_d160.bpl,O408br160.bpl和O408bd160.bpl.
SourceForge的文档没有解释这些库之间的差异.
有人可以为我解码文件名,这样我就可以确定将这四个库中的哪一个安装到Delphi XE2中.
谢谢!
我正在将C++ Builder程序迁移到Visual Studio 2013 C++/Win32/Win32项目.
但是,在创建新项目(C++/Win32/Win32项目)之后,我可能会尝试查看/编辑Visual Studio创建项目时自动创建的主窗体.我知道如何在C#,C++ Builder和Delphi中查看/编辑表单,但我没有看到如何查看表单,以便我可以在VS 2013中为C++ Windows应用程序添加它.
什么是我不明白?什么摇滚是IDE中隐藏的主要形式?
我知道表单在那里,有一个简单的菜单和一个关于框,因为它是在运行新创建的项目/程序时显示的.
表单我指的是新创建的应用程序的主窗口.
我正在使用不同的C编译器升级经过全面测试的德州仪器(TI)MSP430微控制器C程序,从Quadravox,AQ430开发工具改为VisualGDB C编译器.
该程序使用VisualGDB编译零错误和零警告.中断服务程序,定时器,UART控制等等都似乎正在工作.但是,sprintf的某些用途不起作用.例如:
unsigned int duration;
float msec;
msec = (float)duration;
msec = msec / 125.0;
sprintf(glb_response,"break: %3.1f msec",msec);
Run Code Online (Sandbox Code Playgroud)
返回: break: %3.1f msec
这是预期的: break: 12.5 msec
我已经了解了以下内容(来自维基百科):
编译器选项--printf_support = [full | 最小| nofloat]允许您使用较小的,功能受限的printf/sprintf变体,并在构建时进行选择.
有效值为:
full:支持所有格式说明符.这是默认值.
nofloat:不包括对打印浮点值的支持.支持除%f,%g,%G,%e和%E之外的所有格式说明符.
minimal:支持不带宽度或精度标志的整数,字符或字符串值的打印.具体而言,仅支持%%,%d,%o,%c,%s和%x格式说明符
我需要对printf的全力支持.我知道我的产品上的MSP430将支持这一点,因为这个C程序已服务多年.
我的问题是,我无法弄清楚1)VisualGDB是否有办法将printf支持设置为full,2)如果是这样,在哪里设置它.
任何和所有的评论和答案将不胜感激.
使用 Visual Studio 2015 制作 Windows 10 应用商店应用程序时,包清单 (Package.appxmanifest) 允许您添加 5 种不同分辨率的徽章徽标。徽章标志有什么用?