Articles of c + +

创build暂停/可恢复线程的最佳方法是什么?

我正在做一些networking编程的微处理器发送低缓冲区通知,我有一个线程,写一个设置的信息量。 完成后,需要进入挂起状态并等待低缓冲区通知恢复。 使用Windows的线程池API,还是使用CreateThread()创build的线程更好?

C ++调用远程对象的方法(RPC一样)

我正在寻找一个RPC库,允许我在另一个进程(在Windows)中调用一个对象的成员函数。 当前遇到的问题是一些Serverside对象已经存在并且有多个实例。 服务器应该能够将指针/标识符传递给实现代理的客户端,然后将代理指向远程对象实例。 所以我基本上想要的是这样的: Client: TestProxy test = RemoteTestManager.GetTestById(123); test.echo("bla"); 其中Test的实例已经存在于服务器上,而RemoteTestManager是客户端在另一个rpc调用中获得的服务器上的pipe理器类。 另外,它应该优先运行命名pipe道,因为可能有多台服务器在同一台机器上(实际上我想更像一个简单的IPC:D)。 所以我的问题实际上是:是否有像这样的C ++在那里,或者我必须自己编写一个

在C中__in __out

可能重复: __in __out __in_opt __allowed()的用途是什么,它们是如何工作的? 我应该在自己的代码中使用类似的结构吗? 我在C中看到了一个代码: DWORD GetFileVer(__in LPTSTR FileName, __out LPTSTR lpVersion, __in DWORD nSize) { … } 我试图编译它,但失败了。 谁能告诉我__in和__out是什么意思? 我咨询了MSDN,但是找不到任何有用的信息。 谢谢。

睡眠()function不工作?

我在Windows上的Code :: Blocks中使用GNU GCC编译器。 为什么不睡(秒)在这里工作? 我试过它使用库,它工作正常。 谢谢。 编辑:由“不工作”我的意思是,不编译。 抱歉。 #include <stdio.h> #include <stdlib.h> #include <unistd.h> int main(int argc, char *argv[]){ char * c = (char *) malloc(sizeof(char)*50); if(–argc>0){ printf("POTATO: \n"); while(argc>=1){ printf("- %s\n", argv[argc]); sleep(10); argc–; } printf("\n"); } printf("A\n"); scanf("%s", c); printf("What you wrote: %s\n", c); scanf("%s", c); return 0; }

是否可以忽略UnMapViewOFFile()的错误487(ERROR_INVALID_ADDRESS)?

下午好,我们正在尝试构build一个由Windows和Linux 32位应用程序使用的内存映射文件caching程序的原型。 每当我们运行原型时,当我们尝试调用UnMapViewOfFile来取消映射一个caching的内存映射文件区域时,我们会得到一个错误487(错误无效地址)。 我们认为这是因为我们试图取消映射前一个未映射的区域。 我们想知道是否可以忽略这个错误信息。 我们尽量确保每次调用MapViewOfFile都通过一个UnMapViewOfFile进行匹配,每次调用MapViewOfFile时,我们使用下面的代码: std::deque<Range> ranges_type; std::multimap<char *,Range> mmultimap; MapPtr = (char*)::MapViewOfFile(hMapping, FILE_MAP_WRITE | FILE_MAP_READ, 0, baseoff, mappedlength); if (MapPtr == 0){ DWORD lasterr = GetLastError(); ErrorMessage(lasterr); } ranges_type.insert(RangeDeque::value_type( PreviousNCopy, PreviousN, adjustedptr + n, MapPtr, TimeStamp, mappedlength)); mmultimap.insert(RangeMultiMap::value_type( MapPtr, Range(PreviousNCopy, PreviousN, adjustedptr + n, MapPtr, TimeStamp, mappedlength))); 每次我们取消映射内存映射文件区域时,我们使用以下摘录: typedef std::multimap<char *,Range>::const_iterator I; numerased […]

Visual C ++ – 重写从DLL导入的函数?

我想覆盖kernel32.dll中的特定function。 是否有可能在静态库中重新定义该函数,并强制执行该静态库中的可执行文件? 我想不同的联系可能会成为一个问题。 这将是可以用我自己的自定义DLL覆盖它。 然而,问题是DLL本身需要链接到kernel32.dll,所以它忽略了我对该函数的定义。 编辑:我得到它与我自己的DLL工作。 在构build时,链接时间码生成需要被禁用。 那么静态链接重写的函数呢?

关心使用共享内存与CreateFileMapping和MapViewofFile

我有2个关于使用共享内存的问题。 我正在使用CreateFileMapping在两个进程之间创build共享内存区域。 1)我知道我需要调用CreateFileMapping或OpenFileMapping调用返回的每个句柄的CloseHandle来释放内存。 我的问题是,如果使用共享内存的程序在不调用CloseHandle的情况下退出,那么所有的句柄都会被适当的closures,而mem被Windows XP / 7解除分配? IE浏览器 – 所有使用内存的进程closures后,是否有可能发生内存泄漏? 2)我使用MapViewofFile获取指向mem的指针。 在一个实例中,我假设共享内存将始终存在于方法的上下文中。 所以我将MapViewOfFile的返回值保存为一个指针,并closures了mem的句柄,并使用指向共享mem的指针(但仍然locking对它的访问)。 这是安全的,还是我应该每次访问共享内存调用MapViewOfFile? 谢谢, 伊恩

如何判断用CreateProcess启动的进程是否仍在运行?

如果我有通过CreateProcess()创build的进程,我将如何确定它是否仍在运行? 我知道我需要使用pi.hProcess但我不知道如何,谷歌并没有真正给我有意义的提示。 PROCESS_INFORMATION pi; STARTUPINFO si; ZeroMemory(&si, sizeof(si)); si.cb = sizeof(si); ZeroMemory(&pi, sizeof(pi)); bool got_it=CreateProcess(NULL, CA2T(launchString.c_str()), NULL, NULL, false, NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi);

为什么我的简单Hello世界C ++应用程序使用3个线程?

当我看着Windows任务pipe理它说,它使用3线程? 为什么是这样? 我期待只有一个线程被使用。 我使用Netbeans IDE和MinGW-Windows g ++来编译它。 谢谢 码: #include <iostream> using namespace std; int main() { cout << "Hello World"; int input; cin >> input; return (EXIT_SUCCESS); }

在Windows中的目录有一个inode号码?

我需要在Windows中find一个目录的inode号码。 使用_stat和_stat64函数,我可以获取文件的inode和其他信息。 但是,当我使用相同的Windows目录,它总是给任何目录相同的号码。 有没有办法findWindows目录的inode号码?