我正在开发一个多文档应用程序.目前它使用MDI,这对我(作为开发人员)以及我相信的用户来说非常方便.然而,有一个"反对" - 我没有找到快速加载许多子窗口的解决方案(每次创建窗口并最大化以填充父级区域时,有一个'动画'调整大小需要花费大量时间到目前为止,我正在考虑切换回选项卡界面(这需要更多的工作,我需要将一个表单"嵌入"到页面表,因为有许多"种类"的表单可用,一些用于编辑文本文档,一些用于其他对象)...
所以,你有什么看法?我应该使用MDI还是标签界面?
我想为我的安装设置退出代码,这样我就知道为什么安装被中止了.我正在使用Inno Setup.
我想在后台线程中执行数据库查询.OmniThread库将帮助我完成所有的线程,但到目前为止我还有一件事情我不明白:
每个线程都需要单独的数据库连接.后台线程因此创建数据库连接,创建查询然后执行它.
现在我可以使用后台线程的查询对象访问查询结果.
但是在执行查询之后,我想在主线程中访问查询结果.
如果我只是引用后台线程查询对象,这是否会导致问题,因为我正在访问另一个线程中的数据库连接?
据我所知,在这种情况下,主线程不会有它独立的数据库连接,并使用后台线程中的那个并不好.
我的想法在哪里被扭曲,这是做正确的方法?
我知道优秀的DevExpress LayoutManager以及Delphi新版本中的半尝试.
但我想知道Open Source布局管理器是否确实存在,可用于替换表单编辑器.
我在Obj-C中为我的iPhone应用程序构建了一个小版本,它可以:
Form.Add(TEXT_EDIT,Options,LEFT)
Run Code Online (Sandbox Code Playgroud)
我们的想法是能够通过代码构建一切,并简化国际化,解决方案的独立性和那些东西......
旧版本的Visual Basic中使用的OLE变体,在COM自动化中普遍存在,可以存储许多不同的类型:基本类型,如整数和浮点数,更复杂的类型,如字符串和数组,以及一直到IDispatch
实现和指针形式的ByRef
变种.
变量也是弱类型的:它们将值转换为另一种类型,而不会发出警告,具体取决于您应用的运算符以及传递给运算符的值的当前类型.例如,比较两个变体,一个包含整数1
,另一个包含字符串"1"
,为了相等将返回True
.
因此,假设我正在使用基础数据级别的变体(例如,VARIANT
在C++或TVarData
Delphi中 - 即不同可能值的大联合),我应该如何一致地散列变体以使它们遵守正确的规则?
规则:
如果我必须使用不同的排序和直接比较规则以使哈希适合,那就没关系.
我正在工作的方式是我将变量规范化为字符串(如果它们适合),并将它们视为字符串,否则我正在使用变量数据,就像它是一个不透明的blob,并散列和比较它原始字节.当然,这有一些局限性:数字1..10
排序[1, 10, 2, ... 9]
等等.这有点令人讨厌,但它是一致的,而且工作很少.但是,我想知道这个问题是否有一个公认的做法.
我正在使用Delphi 5.
我想知道使用'TFilterGraph'完成avi文件播放的时间.我想自动一个接一个地运行多个avi文件.所以我下载了DSPack并使用了'TFilterGraph'和'TVideoWindow'组件.avi文件视频正常显示.我如何知道avi视频或任何视频已完成播放,以便我可以选择下一个avi或任何其他视频文件播放?
procedure TForm1.Button2Click(Sender: TObject);
begin
videowindow1.FilterGraph:=filtergraph1; //query interfaces to video window
filtergraph1.Active:=true;
filtergraph1.RenderFile('I:\Project Part 1\Clips\More Clips\D.avi');
filtergraph1.Play;
end;
Run Code Online (Sandbox Code Playgroud) 我正在使用COM interop在使用VS2012/.NET 4.5/Win8.1的非托管应用程序中创建托管插件.所有的互操作似乎都没问题,但是当我关闭应用程序时,我得到了一个MDA异常,告诉我在发布完成期间RCW持有的COM对象时发生了AV.
这是调用堆栈:
clr.dll!MdaReportAvOnComRelease::ReportHandledException() + 0x91 bytes
clr.dll!**SafeRelease_OnException**() + 0x55 bytes
clr.dll!SafeReleasePreemp() + 0x312d5f bytes
clr.dll!RCW::ReleaseAllInterfaces() + 0xf3 bytes
clr.dll!RCW::ReleaseAllInterfacesCallBack() + 0x4f bytes
clr.dll!RCW::Cleanup() + 0x24 bytes
clr.dll!RCWCleanupList::ReleaseRCWListRaw() + 0x16 bytes
clr.dll!RCWCleanupList::ReleaseRCWListInCorrectCtx() + 0x9c bytes
clr.dll!RCWCleanupList::CleanupAllWrappers() + 0x2cd1b6 bytes
clr.dll!RCWCache::ReleaseWrappersWorker() + 0x277 bytes
clr.dll!AppDomain::ReleaseRCWs() + 0x120cb2 bytes
clr.dll!ReleaseRCWsInCaches() + 0x3f bytes
clr.dll!InnerCoEEShutDownCOM() + 0x46 bytes
clr.dll!WKS::GCHeap::**FinalizerThreadStart**() + 0x229 bytes
clr.dll!Thread::intermediateThreadProc() + 0x76 bytes
kernel32.dll!BaseThreadInitThunk() + 0xd bytes
ntdll.dll!RtlUserThreadStart() + 0x1d bytes
Run Code Online (Sandbox Code Playgroud)
我的猜测是应用程序已经销毁了它的COM对象,其中一些引用被传递给托管插件 - 而对RCW的IUnknown :: Release的调用让它变得繁荣.
我可以在输出窗口(VS)中清楚地看到应用程序已经开始卸载其中的一些dll.
'TestHost.exe': Unloaded …
Run Code Online (Sandbox Code Playgroud) 问题
我正在使用.Net 4.5创建一个基于 Windows 7 的 C# WPF应用程序,它的一个主要功能是调用某些函数,这些函数与具有一组用户定义的循环时间的自定义硬件接口。例如,用户可能会选择每 10 或 20 毫秒调用两个函数以及每 500 毫秒调用另一个函数。用户可选择的最小循环时间为 1 毫秒。
起初,时间似乎是准确的,并且根据需要每 1 毫秒调用一次函数。但是我们后来注意到大约1-2%的时间是不准确的,有些函数被调用只延迟了 5 毫秒,而其他函数可能会延迟到 100 毫秒。即使循环时间大于 1 毫秒,我们也面临线程休眠的问题,它应该调用外部函数(一个 20 毫秒的函数可能会延迟 50 毫秒调用,因为线程正在休眠并且没有调用该函数)
经过分析,我们得出结论,这些延迟是零星的,没有明显的模式,这些延迟背后的主要原因可能是操作系统调度和线程上下文切换,换句话说,我们的线程并没有像我们需要的那样一直处于唤醒状态.
由于 Windows 7 不是 RTOS,我们需要找出是否可以以某种方式解决此问题。但我们确实知道这个问题在 Windows 上是可以解决的,因为我们使用其他具有类似功能的工具,可以满足最大 0.7 ms 容错的时序约束。
我们的应用程序是多线程的,最多同时运行 30 个线程,其当前 CPU 使用率峰值约为 13%
尝试的解决方案
我们尝试了很多不同的东西,主要是使用秒表计时器来测量计时,并且IsHighResolution为 true(使用了其他计时器,但我们没有注意到太大差异):
创建一个单独的线程并赋予它高优先级
结果:无效(使用可怕的Thread.Sleep()
,没有它并使用连续轮询)
使用 C# 任务(线程池)
结果:改进很小
使用 1ms 周期的多媒体定时器 …
我们有一个非常庞大的项目,有20-30个模块,但它大部分都已完成.它处于维护阶段(主要是错误修复,很少有新功能).我正在努力想出一些需要维护产品的开发人员.
有没有一种很好的方法来衡量这个数字?
该项目主要是基于WinForm的C#应用程序(混合了.net 1.1和2.0)以及大量的vb6应用程序.
delphi ×6
c# ×2
c++ ×1
com ×1
com-interop ×1
database ×1
delphi-2009 ×1
delphi-5 ×1
directshow ×1
dspack ×1
exit-code ×1
inno-setup ×1
interface ×1
layout ×1
maintenance ×1
mdi ×1
rcw ×1
rtos ×1
tabs ×1
tdbgrid ×1
variant ×1
winapi ×1
windows ×1