我们有一个非常庞大的项目,有20-30个模块,但它大部分都已完成.它处于维护阶段(主要是错误修复,很少有新功能).我正在努力想出一些需要维护产品的开发人员.
有没有一种很好的方法来衡量这个数字?
该项目主要是基于WinForm的C#应用程序(混合了.net 1.1和2.0)以及大量的vb6应用程序.
我已经开发了一段时间了,到目前为止我还没有在开发过程中使用指针.
那么指针的好处是什么?应用程序运行得更快还是使用更少的资源?
因为我确信指针很重要,你可以"指出"一些文章,基本但很高兴开始在Delphi中使用指针吗?谷歌给了我太多,太特别的结果.
在Delphi 2009中是否有一种方法可以根据编译器指令有条件地编译一段代码.具体来说,我希望只有在打开范围检查编译器指令时才包含代码.
像这样的东西:
{$ ifdef RANGECHECKINGISON} [在这里做范围检查代码] {$ endif}
delphi compiler-construction conditional directive delphi-2009
我还需要能够控制它的音量.另外,如何控制系统音量,检测低音量或静音状态?
我今天在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 .但是所有多线程都应该是可拆卸的.更复杂的方法甚至可能包括一些代码来测试多线程性能并设置自动使用的线程数,甚至可以单独用于不同的任务.
===================
我在CurStepChanged(ssPostInstall)PascalScripting事件处理程序中的InnoSetup脚本中执行了很多自定义操作.由于这些操作需要一些时间才能完成,我想更新InnoSetup Wizard GUI状态文本并告诉用户幕后发生了什么.使用"StatusMsg"参数在[Run]部分中可能出现的类似情况.我知道我可以使用TOutputProgressWizardPage/CreateOutputProgressPage(),我在之前的项目中做过,但这对我来说有点太过分了......
是否更容易从PascalScripting代码更新InnoSetup Wizard GUI状态文本,其效果与StatusMsg参数相同?
我需要在查询执行之前显示一个弹出窗口,显示执行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中有一个基本的疑问.当我在设计时保留任何组件时,例如TADOConnectuion和按钮点击甚至我写下面的代码然后我没有得到任何错误:
begin
ADOConnection.Free; //No error
ADOConnection.Free; //No error
ADOConnection.Free; //No error
end;
Run Code Online (Sandbox Code Playgroud)
但是如果我在运行时创建相同的对象,则会出现"访问冲突..."错误
begin
ADOConnection := TADOConnection.create(self);
ADOConnection.Free; //No error
ADOConnection.Free; //Getting an "Access Violation..." error
end;
Run Code Online (Sandbox Code Playgroud)
即使我创建如下对象,我也得到相同的错误:
ADOConnection := TADOConnection.create(nil);
Run Code Online (Sandbox Code Playgroud)
只是想知道这种行为背后的原因,即为什么在设计时保留组件时没有错误?
我已经开始构建一个tcp服务器,它将能够接受许多客户端,并同时从所有客户端接收新数据.
到目前为止,我使用IOCP用于tcp服务器,这非常简单和舒适,但这次我想使用Async/Await技术.那是在C#5.0中发布的.
问题是,当我开始编写使用异步服务器/ AWAIT,我想通了,在TCP多用户服务器的使用情况,异步/ AWAIT技术.并且常规同步方法将起作用.
这是一个更具体的简单示例:
class Server
{
private TcpListener _tcpListener;
private List<TcpClient> _clients;
private bool IsStarted;
public Server(int port)
{
_tcpListener = new TcpListener(new IPEndPoint(IPAddress.Any, port));
_clients = new List<TcpClient>();
IsStarted = false;
}
public void Start()
{
IsStarted = true;
_tcpListener.Start();
Task.Run(() => StartAcceptClientsAsync());
}
public void Stop()
{
IsStarted = false;
_tcpListener.Stop();
}
private async Task StartAcceptClientsAsync()
{
while (IsStarted)
{
// ******** Note 1 ********
var acceptedClient = await _tcpListener.AcceptTcpClientAsync();
_clients.Add(acceptedClient);
IPEndPoint ipEndPoint = (IPEndPoint) …Run Code Online (Sandbox Code Playgroud) delphi ×6
delphi-7 ×2
.net ×1
async-await ×1
audio ×1
boost ×1
c# ×1
c#-5.0 ×1
c++ ×1
conditional ×1
datetime ×1
delphi-2009 ×1
delphi-2010 ×1
delphi-xe2 ×1
directive ×1
file-io ×1
formatting ×1
inno-setup ×1
installation ×1
installer ×1
maintenance ×1
pointers ×1
tcplistener ×1
winapi ×1