草庐IT

c++ - 是否可以对非常大的 STL 字符串进行浅拷贝?

下午好,我们正在构建重复数据删除器的原型(prototype)。我们正在使用一个STL字符串数组来存储要删除的记录。该数组如下所示:std::string*StringArray=newstd::string[NumberDedupeRecords]记录非常大,有160,000,000字节。当我们尝试在std::string*StringArray中存储要删除重复数据的记录的std::string版本时,STL会对该字符串进行深度复制,并mallocsa至少160,000,000字节的新缓冲区。我们很快就用完了堆内存并得到了一个std::bad_alloc异常。是否有避免深拷贝和std

c++ - 强制窗口位于最顶层的窗口之上(如任务管理器)

这个问题在这里已经有了答案:Howtokeepmytopmostwindowontop?[duplicate](1个回答)关闭9年前。我有一个窗口,我想将其显示在所有其他内容之上。我的代码能够成功地强制它位于几乎每个窗口之上,除了其他最顶层的窗口。这是我使用的代码:SetWindowPos(getSDLWindow(),HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE);每次单击鼠标中键时都会执行此行(我使用鼠标钩来触发它)。一旦我启动我的程序并单击一次中键,从那时起,我的窗口就会保持在所有“常规”窗口之上。但是,所有“

c++ - 给定线程 ID,如何确定它是否仍在 Windows 上运行

在Linux上,我们有pthread_kill()来执行此操作。我正在尝试为它找到Windows对应项。换句话说,给定一个线程id,有没有办法判断线程是否还在运行?GetExitCodeThread()是我发现的最接近的方法,但是,它需要线程句柄而不是线程ID作为其参数。 最佳答案 您不应该为此目的使用线程ID:线程ID可以重复使用,因此如果您获得线程ID,则该线程退出,另一个线程可以使用相同的线程ID启动。句柄不存在这个问题:一旦一个线程终止,该线程的所有句柄都会反射(reflect)该线程的终止状态。您可以使用OpenThrea

c++ - 比 MFC 更好的框架?

我的客户多年来一直使用MFC应用程序。主要原因是因为他们的应用程序是与各种传感器交互的实时应用程序,而他们的性能是他们成功的关键。大约10年前,我使用MFC,然后转向.NET。但如果有必要,我愿意回到MFC。但问题是它是否值得,以及现在是否有比MFC更好的东西。我知道C++是优化我们的应用程序所必需的,MFC是Win32API的OOP包装器,可能是Windows上最快的OOPUIAPI。但我主要担心它的可测试性和复杂的API。所以从长远来看,MFC可能会减慢我们的速度。你怎么看?是否有任何框架可以实现比MFC更好的性能?更新:至于所需的性能,我没有确切的数字,但我看到一个应用程序正在运

c++ - 在windows下用c++列出目录

我想列出当前目录的所有文件,所以我有这段代码:intWLoader::listdir(void){WIN32_FIND_DATAdata;std::wstringpath(L"*");std::wstring*name;HANDLEhFile=FindFirstFile(path.c_str(),&data);if(hFile==INVALID_HANDLE_VALUE)return(-1);while(FindNextFile(hFile,&data)!=0||GetLastError()!=ERROR_NO_MORE_FILES){std::cout由于未知原因,我的程序显示了这个

c++ - 显式调用 DLL

谁能告诉我为什么我的SimpleTest应用程序不显示“测试”?DLL加载成功,我只是没有得到任何控制台输出。SimpleDLL.cpp#include"stdafx.h"#include"SimpleDLL.h"#include"stdafx.h"#includeintTest(){std::coutSimpleDLL.h#ifndef_DLL_TUTORIAL_H_#define_DLL_TUTORIAL_H_#include#ifdefinedDLL_EXPORT#defineDECLDIR__declspec(dllexport)#else#defineDECLDIR__dec

c++ - CreateProcess() 错误

STARTUPINFOsi;PROCESS_INFORMATIONpi;memset(&si,0,sizeof(si));memset(&pi,0,sizeof(pi));si.cb=sizeof(si);LPCWSTRprocName=(LPCWSTR)"D:\\testdir1\\Calc.exe";LPWSTRprocArg=(LPWSTR)"blacknull";if(CreateProcess(procName,procArg,0,0,0,CREATE_DEFAULT_ERROR_MODE,0,0,&si,&pi)){//dosomework}printf("CreatePr

c++ - 从正在运行的程序中读取值

在DOS.exe程序中(无法访问源代码),DOS屏幕显示:rate=60.(或其他一些值)。如何读取输出“60”以用作我在Python或C/C++中制作的应用程序的输入,除了阅读和打字(我想运行它几十次)。此程序在WindowsXP模式下运行。 最佳答案 使用subprocess模块。有几种不同的方法;最常见的是使用Popen对象。>>>importsubprocess>>>proc=subprocess.Popen(['echo','rate=60'],stdout=subprocess.PIPE,stdin=subprocess

c++ - 确定窗口恢复大小

我正在尝试生成一个位图,其中包含将窗口恢复到桌面时将显示的内容。GetWindowRect返回它的最小尺寸,GetWindowplacement返回它应该去的地方。但是我找不到告诉我它有多大的API。如何确定恢复后窗口的大小? 最佳答案 GetWindowPlacement确实是您想要的。使用rcNormalPosition,它是一个包含标准化位置坐标的RECT。或者,如果WPF_RESTORETOMAXIMIZED在窗口放置flags中,则使用与窗口关联的监视器的工作区。话虽如此,在Windows7上,GetWindowPlace

c++ - Windows 主页 - SHGet(已知)文件夹路径

我正在尝试编写一个函数来获取Windows等效的HOME。我的C技能生疏了,所以请不要介意我的示例代码无法编译。我试图在WindowsVista和更新版本上使用SHGetKnownFolderPath,在Server2003和更早版本上使用SHGetFolderPath。因为我预计会遇到运行WindowsXP的用户(因为它仍然是Windows的第一部署版本),所以我将避免在符号表中引用SHGetKnownFolderPath(因为这会导致二进制文件甚至不会在XP上加载)。我从那里知道LoadLibrary()shell32和GetProcAddress(),但至少可以说,我在处理函数指