草庐IT

c++ - 内存映射文件和实际内存使用情况如何?

真的找不到任何关于这个的细节,这里是我所知道的关于Windows中的mmf的所有信息:在Windows中创建内存映射文件不会增加程序使用的表观内存量创建该文件的View消耗的内存相当于View大小这对我来说看起来很倒退,因为一方面,我知道mmf本身实际上有内存……在某处。如果我在mmf中写一些东西并破坏View,数据仍然存在。同时,为什么View会占用任何内存?它只是一个指针,不是吗?然后是ram中的实际内容和磁盘中的内容的奇怪之处。在具有分布式访问模式的大型mmf中,有时速度很快,有时则不然。我猜其中的一些有时会存储在文件中,如果一个与它或分页文件相关联,但实际上,我不知道。无论如何

c++ - 为什么返回 Windows BOOL 数据类型而不是 int?

来自MSDN.BOOLWINAPIGetMessage(_Out_LPMSGlpMsg,_In_opt_HWNDhWnd,_In_UINTwMsgFilterMin,_In_UINTwMsgFilterMax);声明如下:“如果函数检索到的消息不是WM_QUIT,则返回值为非零。如果函数检索到WM_QUIT消息,则返回值为零。如果有错误,返回值为-1。”boolean值不是true还是false?看来我们这里有三个选项,true、false和oopsie_daisy....因此,在输入此内容时,我认为我应该检查WinDef.h并在其中找到:typedefintBOOL;嗯……BOOL只

c++ - Windows中的变量类型

只要有不同大小的不同变量类型,为什么Windows使用宏和移位运算符将2个值映射到一个变量中,例如:这是win32窗口程序的示例://...caseWM_COMMAND:{switch(LOWORD(wParam)){caseIDC_LISTBOX:{switch(HIWORD(wParam)){//handlemessage}}break;}}break;只是为什么Windows不使用两个short类型的变量来代替?还是这有一些特权?谢谢大家 最佳答案 窗口消息只能传递大约2个整数(wParam和lParam参数)。整数值本身不需

c++ - WINAPI - 我想在一个单独的线程中进行消息泵

在WindowsAPI中,制作一个窗口需要一个消息泵来保持窗口运行和更新。现在,写一个消息泵由一个while循环组成,它控制了整个程序,不允许执行其他事情,这是一个大问题。考虑我的代码,它是一个头文件,我称之为CFrame.h(因为在里面我创建了一个名为CFrame的类,它旨在模仿JFrame在Java中)。换句话说,我希望可以创建CFrame的多个实例,以便显示多个窗口,并且消息循环不会在创建第一个窗口后停止窗口。我为函数ThreadExecution()创建了一个新线程,由于某种原因程序刚刚终止,为什么?#defineUNICODE#includeconstwchar_tCLASS

c++ - DeleteFile() 失败但文件存在(文件名很长)

我正在编写一个有错误的备份程序。使用调试器单步调试代码,我发现删除文件时出错。我正在使用CFileFind定位文件,并使用CFileFind::GetFilePath()获取完整路径名。CFileFindfind;BOOLbContinue=find.FindFile(AppendPath(lpszPath,_T("*")));while(bContinue){bContinue=find.FindNextFile();if(!find.IsDirectory()){if(find.IsReadOnly())ClearReadOnlyAttribute(find);if(!::Dele

c++ - 所有文件都有 FILE_ATTRIBUTE_ARCHIVE 属性

我正在开发一个程序,该程序应该从std::vector中的选定目录中检索所有文件的属性。此代码显示了我如何获取文件属性:DWORDattr_flags=GetFileAttributes(file_path);if(attr_flags==INVALID_FILE_ATTRIBUTES){std::cout代码会像这样解析检索到的标志:if(attr_flags&FILE_ATTRIBUTE_ARCHIVE){attrs.push_back(defines::Attributes::kArchive);attr_flags&=~FILE_ATTRIBUTE_ARCHIVE;}if(at

c++ - 在不重新编译源代码的情况下更改 C++(C) 程序中定义的数字

假设我有这个打印数字的简单程序:#includeintunique_id=112233;intmain(){std::cout然后我将它编译成类似a.exe的东西。现在我想创建另一个打开a.exe并将unique_id更改为其他内容的应用程序。可能吗?由于某些限制,我不会将参数传递给程序。我想使用unique_id,顾名思义,唯一标识我的程序运行的位置。但我不想为1000个客户编译我的程序1000次。我知道我可以使用硬盘序列号,但在虚拟机中,这个序列号可能会被省略。我知道我可以使用CPU序列号,但我在S.O帖子中读到该序列号已弃用。我知道我也可以使用MAC地址:),但该地址可以轻松更改

c++ - 虚拟列表控件 (MFC)

我正在使用列表控件来显示vector中元素的表示。单击列表时,另一个控件会显示有关该元素的信息。元素的索引当前由它在控件中的索引确定,但是如果我想对结果进行排序或过滤,这将不再有效。有人告诉我可以使用虚拟列表控件,但MSDN不是很友好,有人可以告诉我如何为此使用虚拟列表控件吗? 最佳答案 坦率地说-将数据(数据vector中的位置)与列表控件中数据的呈现(列表ctrl中的位置)联系起来是我会远离的事情。在MFC中,每个控件都有一个“数据”DWORD成员变量——在MFC中编码时,我总是为添加的每个项目调用“SetItemData”,并

c++ - VC++ : How to prevent esc from closing a dialog box (not mfc)

如何防止esc关闭对话框?我搜索了这个主题,但我只找到了MFC(您可以覆盖MFC中的PreTranslateMessage函数)。但我的程序是用WindowsAPI编写的,不是MFC。我试图在Dialog过程中捕获所有键盘消息,但它们都不起作用。我也尝试在对话框中使用子类化,但它也不起作用。我该怎么做?谢谢。 最佳答案 处理WM_COMMAND并检查IDCANCEL。然后不要将控件传递给默认窗口过程。 关于c++-VC++:Howtopreventescfromclosingadialo

c++ - 通过检测文件打开(创建)进行进程同步

有两个应用程序。第一个应用程序对有问题的机器是远程的(我无权访问它)并通过网络(LAN)创建一个大文件。我无法控制此过程,也不知道它何时发生。这就是我必须与之合作的。我无法以任何方式添加、更改或改变它。第二个应用程序是我写的,找到这个文件就处理它。此应用计划每5分钟运行一次。当我的应用程序尝试处理文件时,可能会出现文件正在写入的情况,导致处理不完整和/或其他错误,因此我需要在开始之前检测文件是否已完全写入处理它。我可以使用OpenFile()并请求读/写锁定访问。错误将指示正在创建文件。我可以用文件系统观察器做一些聪明的事情http://msdn.microsoft.com/en-us