【C++】POCO学习总结(七):进程、管道、进程间同步、共享内存

2023-11-30 00:30

本文主要是介绍【C++】POCO学习总结(七):进程、管道、进程间同步、共享内存,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【C++】郭老二博文之:C++目录

1、Poco::Process 进程

1.1 说明

Poco::Process的功能:

  • 获取有关当前进程的一些信息
  • 开始一个新的进程
  • 终止另一个进程

1.2 用法

头文件:#include “Poco/Process.h”
Poco::Process中的所有方法都是静态的。

常用函数:
1)Poco::Process::PID Process::id():返回当前线程的进程ID
2)Poco::Process::times(long& userTime, long& kernelTime):返回当前进程分别在用户模式和内核模式下执行的秒数
3)Poco::ProcessHandle Process::launch(const std::string& path, const std::vectorstd::string& args)
创建一个新线程,这个线程是通过path指定的可执行文件,命令行参数通过args来传递。
4)Poco::ProcessHandle有两个成员函数:

  • id() 返回新创建进程的进程id。
  • wait() 等待进程终止并返回进程退出码

5)ProcessHandle Process::launch(const std::string& path, const std::vectorstd::string& args, Pipe* inPipe, Pipe* outPipe, Pipe* errPipe)
Poco::Pipe:用于新进程的标准输入、标准输出和标准错误通道。

2、Poco::Pipe 管道

2.1 说明

Poco::Pipe是单向(半双工)通信通道,也就是说数据只在一个方向上流动。

2.2 用法

头文件:#include “Poco/PipeStream.h”
通常不直接使用Poco::Pipe,而是使用输入、输出管道流PipeStream
Poco::PipeInputStream:输入管道
Poco::PipeOutputStream:输出管道

2.3 示例

$ vi pipe.cpp

#include "Poco/Process.h"
#include "Poco/PipeStream.h"
#include "Poco/StreamCopier.h"
#include <fstream>using Poco::Process;
using Poco::ProcessHandle;int main(int argc, char** argv)
{std::string cmd("/bin/ps");std::vector<std::string> args;args.push_back("-ax");Poco::Pipe outPipe;ProcessHandle ph = Process::launch(cmd, args, 0, &outPipe, 0);Poco::PipeInputStream istr(outPipe);std::ofstream ostr("processes.txt");Poco::StreamCopier::copyStream(istr, ostr);return 0;
}

编译:

g++ pipe.cpp -I ~/git/poco/install/include -L ~/git/poco/install/lib -lPocoFoundationd -lpthread

3、进程间通讯

3.1 说明

POCO为进程间同步提供了两个方法:

  • Poco::NamedMutex
  • Poco::NamedEvent

3.2 用法

头文件:

  • #include “Poco/NamedMutex.h”
  • #include “Poco/NamedEvent.h”
    这个两个方法类似于线程同步原语Poco::Mutex和Poco::Event

常用方法和互斥锁相似
1)void Poco::NamedMutex::lock()
2)bool Poco::NamedMutex:: tryLock()
3)void Poco::NamedMutex:: unlock()
4)模板类ScopedLock(M& mutex)方便加解锁

Poco::NamedEvent 有两个操作:
5)void NamedEvent::set()
6)void NamedEvent::wait()

4、Poco::SharedMemory 共享内存

4.1 说明

共享内存区域可以通过两种方式创建:

  • 创建指定大小的命名内存区域
  • 文件可以映射到共享内存区域

4.2 用法

头文件:#include “Poco/SharedMemory.h”

begin()和end()成员函数分别返回一个指针,指向共享内存区域的开始位置和结束位置。

4.3 示例1:文件映射

$ vi smFile.cpp

#include "Poco/SharedMemory.h"
#include "Poco/File.h"
#include <iostream>using Poco::SharedMemory;
using Poco::File;int main(int argc, char** argv)
{File f("smFile.cpp");SharedMemory mem(f, SharedMemory::AM_READ); // read-only accessfor (char* ptr = mem.begin(); ptr != mem.end(); ++ptr){std::cout << *ptr;}return 0;
}

编译:

g++ smFile.cpp -I ~/git/poco/install/include -L ~/git/poco/install/lib -lPocoFoundationd -lpthread

运行后,将会把smFile.cpp文件打印到终端

4.4 示例2:共享内存区域

#include "Poco/SharedMemory.h"
using Poco::SharedMemory;int main(int argc, char** argv)
{SharedMemory mem("MySharedMemory", 1024,SharedMemory::AM_READ | SharedMemory::AM_WRITE);for (char* ptr = mem.begin(); ptr != mem.end(); ++ptr){*ptr = 0;}return 0;
}

这篇关于【C++】POCO学习总结(七):进程、管道、进程间同步、共享内存的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/434912

相关文章

Linux线程同步/互斥过程详解

《Linux线程同步/互斥过程详解》文章讲解多线程并发访问导致竞态条件,需通过互斥锁、原子操作和条件变量实现线程安全与同步,分析死锁条件及避免方法,并介绍RAII封装技术提升资源管理效率... 目录01. 资源共享问题1.1 多线程并发访问1.2 临界区与临界资源1.3 锁的引入02. 多线程案例2.1 为

C++11范围for初始化列表auto decltype详解

《C++11范围for初始化列表autodecltype详解》C++11引入auto类型推导、decltype类型推断、统一列表初始化、范围for循环及智能指针,提升代码简洁性、类型安全与资源管理效... 目录C++11新特性1. 自动类型推导auto1.1 基本语法2. decltype3. 列表初始化3

C++11右值引用与Lambda表达式的使用

《C++11右值引用与Lambda表达式的使用》C++11引入右值引用,实现移动语义提升性能,支持资源转移与完美转发;同时引入Lambda表达式,简化匿名函数定义,通过捕获列表和参数列表灵活处理变量... 目录C++11新特性右值引用和移动语义左值 / 右值常见的左值和右值移动语义移动构造函数移动复制运算符

C++中detach的作用、使用场景及注意事项

《C++中detach的作用、使用场景及注意事项》关于C++中的detach,它主要涉及多线程编程中的线程管理,理解detach的作用、使用场景以及注意事项,对于写出高效、安全的多线程程序至关重要,下... 目录一、什么是join()?它的作用是什么?类比一下:二、join()的作用总结三、join()怎么

Spring Boot 与微服务入门实战详细总结

《SpringBoot与微服务入门实战详细总结》本文讲解SpringBoot框架的核心特性如快速构建、自动配置、零XML与微服务架构的定义、演进及优缺点,涵盖开发环境准备和HelloWorld实战... 目录一、Spring Boot 核心概述二、微服务架构详解1. 微服务的定义与演进2. 微服务的优缺点三

一文解密Python进行监控进程的黑科技

《一文解密Python进行监控进程的黑科技》在计算机系统管理和应用性能优化中,监控进程的CPU、内存和IO使用率是非常重要的任务,下面我们就来讲讲如何Python写一个简单使用的监控进程的工具吧... 目录准备工作监控CPU使用率监控内存使用率监控IO使用率小工具代码整合在计算机系统管理和应用性能优化中,监

C++中全局变量和局部变量的区别

《C++中全局变量和局部变量的区别》本文主要介绍了C++中全局变量和局部变量的区别,全局变量和局部变量在作用域和生命周期上有显著的区别,下面就来介绍一下,感兴趣的可以了解一下... 目录一、全局变量定义生命周期存储位置代码示例输出二、局部变量定义生命周期存储位置代码示例输出三、全局变量和局部变量的区别作用域

C++中assign函数的使用

《C++中assign函数的使用》在C++标准模板库中,std::list等容器都提供了assign成员函数,它比操作符更灵活,支持多种初始化方式,下面就来介绍一下assign的用法,具有一定的参考价... 目录​1.assign的基本功能​​语法​2. 具体用法示例​​​(1) 填充n个相同值​​(2)

Linux进程CPU绑定优化与实践过程

《Linux进程CPU绑定优化与实践过程》Linux支持进程绑定至特定CPU核心,通过sched_setaffinity系统调用和taskset工具实现,优化缓存效率与上下文切换,提升多核计算性能,适... 目录1. 多核处理器及并行计算概念1.1 多核处理器架构概述1.2 并行计算的含义及重要性1.3 并

Linux下进程的CPU配置与线程绑定过程

《Linux下进程的CPU配置与线程绑定过程》本文介绍Linux系统中基于进程和线程的CPU配置方法,通过taskset命令和pthread库调整亲和力,将进程/线程绑定到特定CPU核心以优化资源分配... 目录1 基于进程的CPU配置1.1 对CPU亲和力的配置1.2 绑定进程到指定CPU核上运行2 基于