草庐IT

C# 和 C++ 进程间同步

我们有2个应用程序。一个用C#编写,另一个用C++编写。我们需要维护一个在这些进程之间共享的计数器(在内存中)。每次这些应用程序之一启动时,它都需要检查该计数器并增加它,而每次应用程序关闭时它都需要减少计数器。如果应用程序崩溃或使用任务管理器关闭,我们还需要减少计数器。我们想到了使用操作系统同步对象之一,例如MUTEX。我的问题:什么样的同步对象最适合跨进程(当一个是C#而另一个是C++时)希望我的问题很清楚。非常感谢,阿迪巴尔达 最佳答案 您可能会使用命名信号量。信号量基本上是一个计数,它允许开发人员限制正在访问某些资源的线程/进

c++ - 如何在 C++ 中执行命令并获取命令的返回码 stdout 和 stderr

给定以下答案(第一个c++11答案):HowdoIexecuteacommandandgettheoutputofthecommandwithinC++usingPOSIX?为了方便起见,这里是实现:#include#include#include#include#include#includestd::stringexec(constchar*cmd){std::arraybuffer;std::stringresult;std::shared_ptrpipe(popen(cmd,"r"),pclose);if(!pipe)throwstd::runtime_error("popen

c++ - 为什么 fork() 使用相同的变量但不同的值?

代码如下:#include#includevoidf(int&);voidg(int&);intmain(intargc,char**argv){printf("--beginningofprogram\n");intcounter=0;pid_tpid=fork();if(pid==0){f(counter);printf("childprocess:%d,%p",counter,&counter);}elseif(pid>0){g(counter);for(inti=0;i结果如下:--beginningofprograminf:1,0x7ffc9b01c6a4-childproc

c++ - 无法使用 Boost.process

我下载并打包了Boost库版本1.54.0。我做了所有类似的事情来回答这个问题:HowtouseBoostinVisualStudio2010然后我从这里下载并解压Boost.process:http://www.highscore.de/boost/process/并按照这个问题的答案做了所有事情:HowtocompileBoost.Processlibrary?.我将holderprocess和process.hpp放在holderboost中,将其他holder进程放入libs并尝试使用“--with-process”用b2.exe和bjam.exe编译它,但得到“错误的库”命名

c++ - 如何查询正在运行的进程的参数列表? ( window ,C++)

对于给定的Windows进程,我想知道它是用什么命令行参数启动的。Windows任务管理器能够显示这一点。 最佳答案 假设您知道进程ID,请使用OpenProcess获取它的句柄(这需要提升权限,如文档中所述)。然后使用NtQueryInformationProcess获取详细的过程信息。使用ProcessBasicInformation选项获取PEB进程的-这包含另一个结构指针,您可以通过它获取命令行。 关于c++-如何查询正在运行的进程的参数列表?(window,C++),我们在St

C++ 线程/进程标识符

是否有一种可移植的方法来使用C++获取线程和/或进程标识符(字符串、整数、...)? 最佳答案 您有几种方法,但都意味着使用外部库为您抽象线程。在流行的选择中,有两个是:Boost.Thread图书馆。这是最便携的,但意味着与Boost一起工作,这是一个巨大的库Qt图书馆。这不太便携,意味着要与Qt这个大型库一起工作。如果您已经在这两个库中使用过任何一个,我建议您坚持使用它。否则,请查看他们提供的其他工具并做出选择。 关于C++线程/进程标识符,我们在StackOverflow上找到一个

c++ - 如何在 Windows 上用 C++ 创建进程?

谁能告诉我如何在VC++中创建进程?我需要执行regasm.exetestdll/tlb:test.tlb/codebase该进程中的命令。 最佳答案 regasm.exe(程序集注册工具)对Windows注册表进行更改,因此如果您想将regasm.exe作为提升的进程启动,您可以使用以下代码:#include"stdafx.h"#include"windows.h"#include"shellapi.h"int_tmain(intargc,_TCHAR*argv[]){SHELLEXECUTEINFOshExecInfo;shEx

c++ - 如何重现 Boost 流程文档提示的死锁?

根据Boostdocumentation(section'Whydoesthepipenotclose?'),下面的代码会导致死锁:#include#includenamespacebp=::boost::process;intmain(void){bp::ipstreamis;bp::childc("ls",bp::std_out>is);std::stringline;while(std::getline(is,line)){std::cout文档说:Thiswillalsodeadlock,becausethepipedoesnotclosewhenthesubprocessex

c++ - 找不到 boost_process cmake find_package

我正在尝试将boost库导入我的C++项目,但出于某种原因它找不到Boost.Process,尽管它找到了其他库。我的CMakeLists.txt文件:cmake_minimum_required(VERSION3.9FATAL_ERROR)set(PROJECT_NAME"test-stuff"CXX)project(${PROJECT_NAME})set(Boost_USE_MULTITHREADEDON)find_package(Boost1.64.0REQUIREDsystemfilesystemprocess)if(Boost_FOUND)include_directorie

c++ - 如何绕过模板化成员函数不能为虚函数的限制进行设计

我遇到了一个设计问题(在C++中),我希望(非模板类的)模板化成员函数是虚拟的,并且想知道是否有一个好的、优雅的方法来解决这个问题。场景是这样的,我有机器可以处理通用项目。我为机器使用了一个抽象基类,带有一个虚拟的process(Item)函数,这样每台机器都可以定义自己独特的处理方法。问题在于这些项目也是“通用的”,因为它们公开了特定的接口(interface)以供处理。出于某些原因(主要是为了性能......没有vtable开销),我想对这些项目使用编译时多态性。这样现在每台机器都会有一个像这样的界面:classMachine{public:templatevirtualvoidp