草庐IT

c++ - 需要精确的线程休眠。最大 1ms 误差

我有运行循环的线程。我需要该循环每5毫秒运行一次(1毫秒错误)。我知道Sleep()函数并不精确。你有什么建议吗?更新。我不能用其他方式做到这一点。在循环结束时,我需要某种sleep。我也不希望CPU占用100%。 最佳答案 我一直在寻找适用于实时应用(即高分辨率/高精度和可靠性)的轻量级跨平台休眠功能。以下是我的发现:调度基础知识放弃CPU然后再取回它是昂贵的。根据thisarticle,调度程序延迟在Linux上可能在10-30毫秒之间。因此,如果您需要高精度地休眠少于10毫秒,那么您需要使用特定于操作系统的特殊API。通常的C

c++ - 没有页面文件的 Windows XP 内存管理 - 后果是什么。堆碎片?

我一直在研究我们在WindowsXP嵌入式系统上的应用程序中看到的一个相当难以捉摸的错误。我们已将错误缩小到一个指针,该指针应指向一block内存,而不是指向NULL。由于内存是通过调用未检查的malloc(..)分配的,我的直觉告诉我malloc失败并返回NULL(尽管我们现在也在寻找其他可能性,例如可能无意中改变的竞争条件指针)。这是nativeC++应用程序。为了追查这个原因,崩溃有点令人费解,主要是因为我们只有事后崩溃转储,并且故障出现在我们没有源代码的第三方库中,在不同的线程上。欢乐时光:)我的问题集中在内存耗尽的可能性上。重要的是我们运行的XPEmbedded系统禁用了它的

c++ - 我如何转发声明句柄? (Win32)

如何转发声明HANDLE?我不想在此特定header中包含所有windows.h。 最佳答案 实际上typedefsHANDLE的header是winnt.h。不幸的是,这是15K行-在这里,因此通过包含slimlinewindef.h来解决您的问题有点误导。这是我系统上的相关部分(很明显,细节可能会随着修订而变化,但不会在实现级别发生变化,因为这会破坏现有的二进制文件):////HandletoanObject//#ifdefSTRICTtypedefvoid*HANDLE;#if0&&(_MSC_VER>1000)#define

c++ - 如何将对 ole32.dll 的调用重定向到我自己的代理 DLL?

我正在尝试检测对CoCreateInstance的所有调用在我开始的某些进程中(理想情况下,我也能够检测到子进程中的调用)。为了实现这一点,我使用Windows7上的MicrosoftVisualStudio2008创建了一个代理DLL,它转发标准ole32.dll库中除一个调用之外的所有调用,如多篇文章中所述,例如Intercepted:WindowsHackingviaDLLRedirection.生成的DLL看起来不错,但我无法让现有程序(我使用标准ActiveXControlTestContainer(tstcon32.exe)作为测试应用程序)获取我的代理DLL。根据Proc

c++ - 系统与 ShellExecute - 差异?

在C++中,system()和shellexecute()之间的主要区别是什么?什么情况下应该使用system()和shellexecute()? 最佳答案 在标准C++中没有shellexecute这样的东西。所以没有区别。Win32函数ShellExecute,但这是一个Win32函数,而不是像system这样的C++标准函数。ShellExecute做的事情与system不同。system(或多或少)等同于在命令行中输入命令。ShellExecute相当于双击文件(或右键单击并从列表中选择“动词”)。他们真的一点共同点都没有。

c++ - Spy++ 显示错误结果?

我创建了一个简单的Unicode窗口,我按下键盘上的一个键以查看WM_CHAR消息的wParam值是多少,它给了我预期的字符的Unicode代码点,我按下了'S'键,我的键盘布局设置为阿拉伯语(因此阿拉伯语字符为'س')。现在,我还捕获了Spy++中的窗口消息,但我注意到它为我提供了错误的wParam值,它实际上为我提供了Windows中字符代码的值:阿拉伯语代码页!这是结果的截图:这是源代码:#defineUNICODE#include#includeLRESULTCALLBACKWndProc(HWNDhWnd,UINTmessage,WPARAMwParam,LPARAMlPar

c++ - 如何正确打印 __FILE__ 扩展到的字符串?

考虑这个程序:#includeintmain(){printf("%s\n",__FILE__);return0;}根据文件的名称,此程序是否有效。我面临的问题是我想以编码安全的方式打印当前文件的名称。但是,如果文件包含无法在当前代码页中表示的有趣字符,编译器会发出警告(理所当然):?????????.c(3):warningC4566:characterrepresentedbyuniversal-character-name'\u043F'cannotberepresentedinthecurrentcodepage(1252)我该如何解决这个问题?我想将__FILE__给出的字符

c++ - 基于软件/硬件唯一标识PC

对于生成每台PC许可证key的要求,我需要一些代码,这些代码将在任何PC上返回一个稳定且(几乎)唯一的key。它不必保证唯一,但很接近。不过,它确实需要相当稳定,以便给定的PC始终生成相同的结果,除非硬件发生重大变化。这适用于Windows应用程序,使用wxWidgets但Win32或其他选项没问题。我在考虑MAC地址,但在省电模式下可以例行禁用网卡的笔记本电脑呢?我遇到了GetCurrentHwProfile但它看起来不太像我想要的? 最佳答案 我之前有一个想法是使用CryptProtectData作为识别机器的一种方式。在该AP

c++ - 在主 win32 窗口中创建窗口控制台

我有一个win32应用程序,需要在按下波浪号时像游戏一样打开控制台。我认为最好的解决方案是使用CreateWindow函数。这是正确的吗?我怎样才能让它与主窗口重叠并在再次按下波浪号时隐藏它?谢谢大家 最佳答案 此处的解决方案将不起作用,因为较新版本的WindowsSDK通过以下方式定义FILE结构:#ifndef_FILE_DEFINED#define_FILE_DEFINEDtypedefstruct_iobuf{void*_Placeholder;}FILE;#endif当试图用=运算符覆盖stdin/outFILE结构时,只

c++ - 有没有 Winapi 方法可以将文件移动到回收站?

我研究了很多不同的方法,但大多数方法都需要将文件添加到System32,而我正在寻找一条可以让您将某些内容移动到回收站而无需添加任何内容的行计算机,因为我想要可以立即在所有Windows计算机上运行的东西。请放心,删除不会删除任何主要文件,并且会要求确认。我正在考虑在C++中使用system("")来运行该行。 最佳答案 参见SHFileOperation使用FOF_ALLOWUNDO。 关于c++-有没有Winapi方法可以将文件移动到回收站?,我们在StackOverflow上找到一