我还需要能够控制它的音量.另外,如何控制系统音量,检测低音量或静音状态?
我今天在Dr. Dobbs网站上发现了这个问题,网址是 http://www.ddj.com/hpc-high-performance-computing/220300055?pgno=3 这是关于线程实现的一个很好的建议.用Delphi中的TThread实现这一目标的最佳方法是什么?谢谢Brian
===来自Dobbs博士==============
使多线程可配置!程序中使用的线程数应始终可以从0(完全没有其他线程)配置为任意数字.这不仅可以实现最佳性能的定制,而且还可以证明它是一种很好的调试工具,有时候在客户端系统上出现未知竞争条件时也可以成为救星.我记得不止一种情况,客户可以通过关闭多线程来克服致命的错误.这当然不仅适用于多线程文件I/O.
考虑以下伪代码:
int CMyThreadManger::AddThread(CThreadObj theTask)
{
if(mUsedThreadCount >= gConfiguration.MaxThreadCount())
return theTask.Execute(); // execute task in main thread
// add task to thread pool and start the thread
...
}
Run Code Online (Sandbox Code Playgroud)
这样的机制并不是很复杂(尽管可能需要的工作量比这里显示的要多一些),但它有时非常有效.它还可以与预构建的线程库一起使用,例如OpenMP或Intel的Threaded Building Blocks.考虑到此处显示的测量结果,最好包含多个可配置的线程计数(例如,一个用于文件I/O,一个用于核心CPU任务).对于CPU任务,文件I/O和< 找到的核心数 > 的默认值可能为0 .但是所有多线程都应该是可拆卸的.更复杂的方法甚至可能包括一些代码来测试多线程性能并设置自动使用的线程数,甚至可以单独用于不同的任务.
===================
我需要在查询执行之前显示一个弹出窗口,显示执行sql查询时经过的时间,并在查询结束时关闭该窗口.
其实我做的是这样的
var
frm : tFrmPopupElapsed;
// this form has a TTimer and a TLabel to show the elapsed time
// but the label is not updated, I tried using update and refresh
// but nothing happens
begin
frm := tFrmPopupElapsed.Create(nil);
try
frm.Init; // this procedure enables the timer
frm.Show();
ExecuteMyVeryLongQuery();
finally
frm.Close;
end;
end;
Run Code Online (Sandbox Code Playgroud)
如何更新标签以显示查询执行时所用的时间?使用计时器?还是线程?
我有一个以毫秒为单位的持续时间,理想情况下我希望使用boost :: date_time库中的格式化功能进行格式化.但是,在创建了boost :: posix_time :: time_duration之后,我似乎找不到实际应用格式化字符串的方法.
如何在不删除文件以前内容的情况下将Delphi写入文本文件?我已经知道如何添加文本,但是一旦我尝试添加更多文本,它就会替换文件中已有的文本.
我已经尝试将Rewrite命令更改为Write.
procedure TForm1.BtnokClick(Sender: TObject);
var
myfile :textfile;
naam, van, adress : string;
begin
adress := edtadress.Text;
van:= edtvan.Text;
naam := edtnaam.Text;
AssignFile(myfile,'C:\test.txt');
write(myfile);
Writeln(myfile,naam);
writeln(myfile,van);
writeln(myfile,adress);
closefile(myfile);
end;
Run Code Online (Sandbox Code Playgroud) 这些年来,我不得不忽略了"告诉,不要问"OOP原则,因为我刚刚第一次了解它.
但是上下文是关于验证代码的讨论,该代码已经从ASP.NET Web表单页面转移到数据/业务对象中,并且没有"Validate()"方法,只是一个本身进行验证的save方法. (据说)提出了一个例外.我问为什么这是以这种方式设计的,我被引导到OOP的"告诉,不要问"原则,这是我从未听说过的,所以我们一起看了谷歌,我立即接受了教育.;)
然而,某些东西闻不到正确,不应该在将数据从用户转移到处理和/或收集的业务层之前清除数据,而不是反过来?我对如何做好设计感到困惑.
这似乎是规则"出来,不问"是关于你不应该问目标对象的状态下,目标对象的想法,并认为这一原则从来没有真正打算应用到数据传递到了目标对象.
我目前正在将用于随机二进制文件访问的Delphi方法转换为Java.Delphi程序使用:
TSingleArray = Array[0..MAXSIZE] of Single
...
procedure GetLinkValues(const LinkVar: Integer; const TimePeriod: Integer; var Value: PSingleArray);
...
BlockRead(Fout, Value^, Nlinks*SizeOf(Single));
Run Code Online (Sandbox Code Playgroud)
将字节数组读入Single数组.有没有一种相同的方法在Java中执行此操作而不迭代数组?
我正在使用
List<Float> l = new ArrayList<Float>();
…
for (int i = 0 ; i < nLinks ; i++ )
l.add( resultsFile.readFloat());
Run Code Online (Sandbox Code Playgroud)
但我很关心速度.字节序不是问题.
您更喜欢以下哪种款式?
你也有gui设计的好链接吗?
我有一个复杂的应用程序,在正常编译时按预期工作,但是在使用FastMM 4.97(最新版本)编译时关闭表单会产生访问冲突.当消息调度尝试处理已经被销毁的表单上的按钮的消息时,会发生AV.我还为项目启用了Eurekalog 6.1.0.1(最新版本).在禁用FastMM的FullDebug模式的情况下执行相同的代码时,它不会捕获任何运行时异常.
在某些情况下,FastMM是否可能会改变EXE的行为,从而导致或错误地报告访问冲突?
这是FastMM错误报告:
--------------------------------2011/3/21 13:30:17--------------------------------
FastMM has detected an attempt to call a virtual method on a freed object. An access violation will now be raised in order to abort the current operation.
Freed object class: TftGenericButton80
Virtual method: Offset +80
Virtual method address: 4A1FF0
The allocation number was: 5628628
The object was allocated by thread 0xE80, and the stack trace (return addresses) at the time was:
403110 [System][@GetMem]
404F03 [System][TObject.NewInstance]
42E85D [FastMM4][CreateComponent]
42EAD9 [FastMM4][TReader.ReadComponent]
42FEE1 [Classes][TReader.ReadValue]
42ED86 …Run Code Online (Sandbox Code Playgroud) 我有一个"uObjects"单元.它有几个不同类型的对象,可以扩展TCollection/TCollectionItem.有一次将所有这些小小的类分组在一个文件中可能有很大的意义,因为事情很小而且它们有点相关,然后你就没有担心的bajillion文件了.
但随着时间的推移,越来越多的方法被添加到这些集合中,使得管理变得更加困难,因此我正在考虑将uObjects单元分解为多个较小的单元以使其更易于维护.
但在此之前,我想知道是否有任何我应该知道的警告.这是我应该继续前进而不放弃的事情吗?或者我是否有任何理由(可能在某些情况下)不想将一个单位的无关部分分解成多个单元?这可能会引发问题吗?我仍然试图围绕来自Java世界的单元的细微差别,其中在单个文件中具有多个类通常不是一种选择.