Articles of pipe理员

CreateFileMapping,MapViewOfFile,如何避免阻塞系统内存

我正在开发针对桌面系统的应用程序,它可能只有256MB RAM(Windows 2000以上)。 在我的应用程序中,我有这个大文件(> 256MB),其中包含约160字节/每个的固定logging。 这个应用程序有一个相当漫长的过程,随着时间的推移,它将随机访问大约90%的文件(用于阅读和写作)。 任何给定的logging写入不会超过特定logging的读取次数(我可以调整该值)超过1,000条logging。 我有两个明显的select这个过程:常规I / O(FileRead,FileWrite)和内存映射(CreateFileMapping,MapViewOfFile)。 后者应该在有足够内存的系统中效率更高,但是在内存不足的系统中,它会将大部分其他应用程序的内存换掉,这在我的应用程序中是不可能的。 有没有办法阻止进程消耗所有的内存(例如,强迫刷新我不再访问的内存页面)? 如果这是不可能的,那么我必须诉诸于正常的I / O; 我希望在写作部分使用重叠的I / O(因为访问是随机的),但是文档说less于64K的写入总是同步服务 。 任何改进I / O的想法都是受欢迎的。

Visual Studio 2010 – 如何减less内存占用

我有一个解决scheme,只有不到100个项目,C ++和C#(主要是C#)的混合。 在VS2005中工作时,Visual Studio的工作集比VS2010的小得多。 我想知道是否有一些可以closures的东西,所以我可以在VS2010下开发32位操作系统而不会耗尽内存。

打开一个文件夹,并用WPF高亮显示一个特定的文件

有没有办法启动一个资源pipe理器窗口,并突出显示该文件夹中的WPF文件? 我已经尝试了以下内容: Process ExplorerWindowProcess = new Process(); ExplorerWindowProcess.StartInfo.FileName = "explorer.exe"; ExplorerWindowProcess.StartInfo.Arguments = ConfigFile.File.FullName; ExplorerWindowProcess.Start(); …但打开文件(在我的情况下,一个XML文件)与Windows资源pipe理器中的默认应用程序,我非常不希望。 我知道可用于Eclipse的Aptana工具允许您在Eclipse项目浏览器中select一个文件,并按照需要在资源pipe理器中显示文件,但是我需要一种在WPF应用程序中实现此function的方法。

远程OpenSCManager失败,访问被拒绝

我正在尝试使用以下代码来控制远程计算机上的服务: // Error checking omitted for brevity HANDLE hToken = NULL; // user = username with no domain specification // domain = targetmachine when targetting computer outside of domain LogonUser(user, domain, password, LOGON32_LOGON_NEW_CREDENTIALS, LOGON32_PROVIDER_WINNT50, &hToken); ImpersonateLoggedOnUser(hToken); SC_HANDLE hSc = OpenSCManager(targetmachine, SERVICES_ACTIVE_DATABASE, SC_MANAGER_ALL_ACCESS); 当从本地域中的计算机运行并在同一个域中定位一台计算机时,这两种方式都可以正常工作,无论是使用当前login用户的凭据还是使用其他凭据。 但是,当我尝试locking不在任何域的计算机时,如果我指定SC_MANAGER_CONNECT以外的任何内容作为所需的访问权限,则OpenSCManager调用将失败,并且访问被拒绝。 从位于域外的计算机运行域计算机(对于作为目标计算机上本地pipe理员的域用户使用用户/域/密码组合)。 从域外的计算机将目标计算机置于域外不起作用。 用户/密码是针对目标计算机上pipe理员组的成员,因此不应该存在帐户权限问题。 我已经使用sc -sdshow scmanager检查了scmanager安全描述符,并且它对于域计算机和非域计算机是相同的。 两者都运行Windows 7 64位。 我也testing过使用psexec ,它具有相同的症状,即在域计算机之间正常工作,但在定位非域计算机时不起作用。 […]

如何使用stdinpipe道作为gcc的源input?

这是我的尝试: CMD文件: @SET PATH=%PATH%;D:\mingw\bin type test10.cpp | g++ -xc++ -o test10.exe 代码(这里无关): int main() {} 错误我得到: g++: fatal error: no input files compilation terminated. 我以为-x选项是为了标识stdininput,gcc本身就是这么说的。

将FFMPEG的输出redirect到Windows上的多个命名pipe道

我正试图在Windows上将video和audio数据stream式传输到两个单独的命名pipe道中。 ffmpeg.exe -f dshow -i video="My camera name":audio="My microphone name" -map 0:1 -ac 1 -f f32le \\.\pipe\audioStream -map 0:0 -f mjpeg \\.\pipe\videoStream 问题是,FFMPEG似乎不了解输出\\.\pipe\audioStream和\\.\pipe\videoStream是pipe道,并将它们视为文件。 如果在FFMPEG启动时已经创build了pipe道,它会覆盖它们并失败。 否则,它会抱怨path不存在并失败。 据我所知,指定pipe:协议应该做的伎俩,但我不知道如何正确使用它,即使只有一个pipe道。 我努力了: pipe:pipeName pipe:pipe\pipeName pipe:\\.\pipe\pipeName pipe://pipeName pipe://pipe\pipeName pipe://\\.\pipe\pipeName 我总是以相同的结果:输出写入控制台而不是pipe道。 如果FFMPEG启动时pipe道已经存在,则没有任何东西连接到pipe道。 是否有可能在Windows上使用命名pipe道使用FFMPEG? 如果是,那么这样做的正确方法是什么?

以完全权限以pipe理员身份运行Java文件

我已经做了一个Java应用程序,我testing了我的电脑和我的铸造电脑,迄今为止这么好…但这个应用程序是我的另一个朋友有迪斯科,当我“安装”我的应用程序在他的电脑Windows Vista的32位)它没有工作,然后我去search和search,我发现,作为特权的问题…我安装了一个虚拟机的Vista 32位和XP 32位做一些testing,米无法运行我的应用程序具有完整的pipe理员权限。 有什么办法可以创build一个batch file,或者让我用所有权限运行我的应用程序? 我的意思是所有,因为我需要连接到计算机的COM端口从设备获取一些数据,我需要存储一些文件,因为我使用外部库,我可能需要一些我不知道的特权…我已经尝试过,没有任何工作: elevate "c:\Program Files\Java\jre\bin\java.exe" -jar "%CD%\installer.jar" 使用微软的升级脚本,我也创build了一个batch file runas /user:Administrator myjar.jar 但没有工作:\任何想法? 先谢谢你

堆碎片和Windows内存pipe理器

我在程序中遇到内存碎片问题,一段时间后无法分配非常大的内存块。 我已经阅读了这个论坛上的相关post – 主要是这个 。 而且我还有一些问题。 我一直在使用内存空间分析器来获取内存的图片。 我写了一个包含cin >> var; 并拍下了记忆的照片: 替代文字http://img22.imageshack.us/img22/6808/memoryk.gif顶部圆弧的位置 – 绿色表示空白,黄色分配,红色提交。 我的问题是在右边分配的内存是什么? 它是主线程的堆栈吗? 这个内存不会被释放,它会分裂我需要的连续内存。 在这个简单的1行程序中,拆分并不是那么糟糕。 我的实际程序在地址空间中间分配了更多的东西,我不知道它来自哪里。 我还没有分配这个内存。 我怎样才能解决这个问题? 我正在考虑切换到像nedmalloc或dlmalloc的东西。 但是,这只适用于我明确分配给我的对象,而图中显示的分割不会消失? 或者有没有办法用另一个内存pipe理器replaceCRT分配? 说到对象,是否有nedmalloc c ++的包装,所以我可以使用新的和删除来分配对象? 谢谢。

如何调用在C#中的Windows屏幕保护程序?

我想在Windows环境中调用用户的屏幕保护程序(如果已定义)。 我知道这可以使用纯C ++代码(然后在C#中的包装非常简单),如这里所build议的。 不过,为了好奇,我想知道这样的任务是否可以通过纯粹的托pipe代码使用点networking框架(版本2.0及以上),没有p / invoke和没有访问C + +端(反过来,可以很容易使用Windows API)。

Linux中的Windows命名pipe道支持

我正在研究一个需要使用命名pipe道的传统Windows应用程序和运行在Linux服务器上的新服务之间进行进程间通信的项目。 Windows应用程序无法更改。 有谁知道是否有一个支持Windows命名pipe道的Linux库? 或者甚至更好,任何人都可以推荐一个他们用于这个目的的图书馆?