我的应用程序从networking获取数据并在场景中绘制(场景使用手工制作的OpenGL引擎)。 它工作几个小时。 当我不使用我的桌面时,由于显示器电源pipe理器信号(dpms),我的显示器closures。 然后,当我触摸鼠标或键盘时,显示器打开,应用程序挂起(X也挂起)。 如果我做了xset -dmps操作系统不使用dpms,并且应用程序工作稳定。 这些问题发生在Centos 6和Archlinux中,但是当我在Ubuntu 12.10下运行应用程序时,它工作的很好! 我尝试了不同的NVidia驱动程序。 没有效果。 我试图用SSH来远程login,并使用gdb连接到进程。 监视器打开后,我无法在进程表中find应用程序。 如何诊断问题? 显示器closures/打开时会发生什么(在OpengGL环境中)? 使用dpms时,Ubuntu会做些特别的事吗? 我们猜测问题的原因! 当显示器closures时,我们失去了OpenGL上下文。 监视器唤醒时,应用程序挂起(无上下文)。 由于不同的显示器连接,视操作系统而异的行为:Kubuntu显示器连接VGA电缆。 所以(可能)它对X行为没有影响。
我遇到了一个特殊情况,在创build特定types的string时出现以下错误: 意外的错误编写debugging信息 – '错误HRESULT E_FAIL已经从调用COM组件返回。 这个错误对于Stack Overflow来说并不新鲜(请看这个问题和这个问题 ),但是这个问题与这个问题没有任何关系。 对于我来说,当我创build一个特定长度的conststring时,会发生这种情况,这个string在开始的某个地方包含一个空字符( \0 )。 重现,首先生成一个适当长度的string,例如使用: var s = new string('a', 3000); 在运行时抓取结果string(例如立即窗口或hover在variables上并复制其值)。 然后,做一个const : const string history = "aaaaaa…aaaaa"; 最后,把\0放在某处: const string history = "aaaaaaaaaaaa\0aa…aaaaa"; 我注意到的一些事情: 如果你把\0放在最后,错误不会发生。 转载使用.NET Framework 4.6.1和4.5 如果string很短,则不会发生。 编辑 :更多宝贵的信息可在下面的评论。 任何想法为什么发生这种情况? 这是一种错误吗? 编辑 : 错误提交,包括来自评论的信息。 谢谢大家。
debugging时,对断点的更改只能在该debugging会话中保留。 一旦debugging器分离,断点恢复到其“预debugging”状态。 我可以欣赏这有时是有用的,并理解为什么它默认这种方式。 然而,有没有人知道是否有一个选项来禁用此function(在VS2010中),如果我在debugging过程中删除/禁用/添加一个断点,下次开始debugging时,更改将持续?
给出以下代码: void f() { class A { template <typename T> void g() {} }; } g ++ 4.4(还有g++-4.6 -std=gnu++0x )抱怨:“本地类中成员模板声明无效”。 显然本地类不允许有模板成员。 这个限制的目的是什么? 它会被删除在C ++ 0x? 注意:如果我将本地类本身作为模板,而不是给它一个模板成员: void f() { template <typename T> class A { void g() {} }; } 我得到“错误:模块声明不能出现在块作用域”。
我find了7种不同的方法来枚举连接到电脑的显示器。 但是所有的解决scheme都会给出不同的结果(监视器数量和每个监视器上的信息)。 这些解决scheme是: 使用着名的EnumDisplayDevices 使用EnumDisplayMonitors 使用Windows Management Instrumentation(WMI) : 使用以下查询:在root\\WMI名称空间中SELECT * FROM WmiMonitorID 。 再次使用WMI : 使用新的查询: SELECT * FROM Win32_DesktopMonitor位于root\\CIMV2命名空间中。 使用安装程序API : 通过首先调用SetupDiGetClassDevs来检索设备信息集,然后使用SetupDiEnumDeviceInfo 使用DirectXgraphics基础结构(DXGI) 首先使用IDXGIFactory::EnumAdapters ,然后使用IDXGIAdapter::EnumOutput 使用连接和configuration显示(CCD)API : QueryDisplayConfig (QDC_ALL_PATHS, &numPathArrayElements, pathInfoArray, &numModeInfoArrayElements, modeInfoArray, nullptr); 我试图正确地理解所有这些方法与MSDN参考之间的区别。 意见 从我观察到的情况来看: WmiMonitorID和Setup API查询返回已连接(不一定是活动)显示的列表。 Win32_DesktopMonitor WMI查询返回错误 (至less意外)结果(即使在非活动状态下,也只能枚举1个监视器,而在另一个监视器上的桌面上)。 EnumDisplayDevices返回活动设备列表(当连接其他监视器时只有1个监视器处于活动状态时除外) EnumDisplayMonitors和DXGI查询返回活动监视器的列表。 CCD似乎是最可靠的方法(提供目标和来源之间的所有可能path)。 问题 当使用这些方法时(连接显示列表,已安装显示列表,活动显示列表),我应该得到什么结果? 如果我使用镜像显示器或扩展显示器怎么办? 如果电脑有多个显卡没有多个输出? 奖金:一些方法( DXGI , EnumDisplayDevices […]
我正在寻找一个类似于iostreams的库,它执行转换,并允许写入内存缓冲区,文件和控制台。 但是,我想要一些types安全的,如iostream。 有没有严重的图书馆这样做? 能够指定输出编码的东西将是一个加号。 请注意,我并不对仅仅面向iostreams的库感兴趣,因为它们只是增加了iostream正在做的复杂性,例如boost::format 。 PreEmptive评论回应:我不想使用cstdio,因为使用该系统是不可能的代码输出位置不可知的。 也就是说,你必须调用一个函数来发送缓冲区,而且你必须调用另一个函数来发送文件,另一个用于控制台等等。 编辑2:在回应下面的评论乱七八糟:我厌倦了iostreams和cstdio。 这是更具体的原因。 我试图保留这个问题的“咆哮”,但是人们总是问我是否离开了我的摇杆,所以这是我的理由。 cstdio 无法正确处理Unicode字符 如果不进行手动缓冲区pipe理,就不能写入类似string的东西 通常需要支持非标准扩展(例如vsnprintf )才能使用(编辑:好的,现在C99中的C99标准库增加了大部分/全部) 在不改变原始代码的情况下,不能改变输出的位置(非标准扩展,例如在glibc中允许你把文件指针当作缓冲区,这种做法是这样的…但是它仍然是一个非标准的扩展) 使安全“有趣”(到整个章节专注于安全文档解释问题,例如“printf”的格式string等) 不安全 input输出stream 慢 对于客户来说太复杂了。 如果只使用标准库中的内容,那么这是非常好的,但是尝试扩展内容几乎是不可能的。 我阅读了整个“标准C ++ IOStreams和Locale”书籍,这本书看起来是唯一一本关于这个主题的书籍 – 两次 – 我仍然不知道发生了什么。 我喜欢iostreams的概念,甚至使用operator<<有些人似乎不喜欢,但似乎完全过于devise给我。 有人不应该花费无数小时阅读书籍来成为你图书馆的简单客户。 当然,如果你正在添加一个新的输出源或者我能理解的东西,但是……客户端应该被屏蔽掉。 (这不是什么图书馆的?) 这是C ++中唯一令人痛苦的事情,在其他编程语言中“正常工作”,我认为没有理由变得复杂。
我试图在OpenCV的帮助下,在我的inputvideostream中检测一个形状(十字)。 目前我是阈值得到我的十字架的二进制形象,它工作得很好。 不幸的是我的algorithm来决定是否提取blob是一个十字架或不是不太好。 正如你在下面的图片中看到的,并不是所有的angular落都在某些angular度被检测到。 我使用findContours()和approxPolyDP()来近似我的轮廓。 如果我在这个近似曲线中检测到12个拐angular/顶点,则认为该斑点是一个十字。 有没有更好的方法来解决这个问题? 我想到了SIFT ,但algorithm必须实时执行,我读到SIFT并不适合实时。
我有以下testing代码: void Button_Click(object sender, RoutedEventArgs e) { var source = new CancellationTokenSource(); var tsk1 = new Task(() => Thread1(source.Token), source.Token); var tsk2 = new Task(() => Thread2(source.Token), source.Token); tsk1.Start(); tsk2.Start(); source.Cancel(); try { Task.WaitAll(new[] {tsk1, tsk2}); } catch (Exception ex) { // here exception is caught } } void Thread1(CancellationToken token) { Thread.Sleep(2000); // If […]
根据MSDN ,哈希函数必须具有以下属性: 如果两个对象相等,每个对象的GetHashCode方法必须返回相同的值。 但是,如果两个对象的比较不相等,则两个对象的GetHashCode方法不必返回不同的值。 对象的GetHashCode方法必须始终返回相同的哈希码,只要不会修改确定对象Equals方法的返回值的对象状态。 请注意,这仅适用于应用程序的当前执行,并且如果应用程序再次运行,则可以返回不同的散列码。 为了获得最佳性能,散列函数必须为所有input生成一个随机分布。 我不断发现自己在以下情况:我已经创build了一个类,实现了IEquatable<T>并重写IEquatable<T> object.Equals(object) 。 MSDN指出: 覆盖Equals的types也必须覆盖GetHashCode; 否则,Hashtable可能无法正常工作。 然后它通常会阻止我一点。 因为,你如何正确覆盖object.GetHashCode() ? 从来没有真正知道从哪里开始,这似乎是一个很大的陷阱。 在StackOverflow中,有很多与GetHashCode覆盖有关的问题,但是其中大部分似乎都是针对特定情况和特定问题。 所以,我想在这里得到一个很好的汇编。 一般build议和指导方针的概述。 该怎么做,不该做什么,常见的陷阱,从哪里开始等等。 我希望它特别针对C#,但是我认为它对于其他.NET语言也是如此(?)。 我想也许最好的办法是先用快速简短的答案为每个主题创build一个答案(如果可能的话,接近一行),然后可能会有更多的信息,并结束相关的问题,讨论,博客文章等。 ,如果有的话。 然后,我可以创build一个职位作为接受的答案(顶部),只是一个“目录”。 尽量保持简短。 不要只链接到其他问题和博客文章。 尝试把它们的本质,然后链接到源代码(尤其是源代码可能会消失。另外,请尝试编辑和改进答案,而不是创build很多非常相似的代码。 我不是一个很好的技术作家,但是我至less会尝试devise一些格式相似的答案,创build目录等等。我也会尝试在这里search一些相关的问题,这些,也许拉出我可以pipe理的精髓。 但是由于我对这个话题不太稳定,所以我会尽量远离:
除了std::ios_base::Init之外,标准C ++库中的所有名称都是小写字母。 为什么是这样?