首页 > 编程语言 >C++ multi process share value via write and read data from serialized file,the better way is shared_

C++ multi process share value via write and read data from serialized file,the better way is shared_

时间:2023-06-16 18:23:41浏览次数:40  
标签:std multi via uuid chrono better file time include

#include <atomic>
#include <chrono>
#include <cmath>
#include <condition_variable>
#include <cstddef>
#include <forward_list>
#include <fstream>
#include <functional>
#include <future>
#include <iomanip>
#include <iostream>
#include <latch>
#include <list>
#include <map>
#include <memory>
#include <mutex>
#include <optional>
#include <queue>
#include <random>
#include <stack>
#include <string>
#include <thread>
#include <utility>
#include <uuid/uuid.h>
#include <vector>

char *uuid_value = (char *)malloc(40);
char *get_uuid_value()
{
    uuid_t new_uuid;
    uuid_generate(new_uuid);
    uuid_unparse(new_uuid, uuid_value);
    return uuid_value;
}

std::string get_time_now(bool is_exact = true)
{
    std::stringstream ss;
    std::chrono::time_point<std::chrono::high_resolution_clock> now = std::chrono::high_resolution_clock::now();
    time_t raw_time = std::chrono::high_resolution_clock::to_time_t(now);
    struct tm tm_info = *localtime(&raw_time);
    ss << std::put_time(&tm_info, "%Y%m%d%H%M%S");
    if (is_exact)
    {
        std::chrono::seconds seconds = std::chrono::duration_cast<std::chrono::seconds>(now.time_since_epoch());
        std::chrono::milliseconds mills = std::chrono::duration_cast<std::chrono::milliseconds>(now.time_since_epoch());
        std::chrono::microseconds micros = std::chrono::duration_cast<std::chrono::microseconds>(now.time_since_epoch());
        std::chrono::nanoseconds nanos = std::chrono::duration_cast<std::chrono::nanoseconds>(now.time_since_epoch());
        ss << "_" << std::setw(3) << std::setfill('0') << (mills.count() - seconds.count() * 1000)
           << std::setw(3) << std::setfill('0') << (micros.count() - mills.count() * 1000)
           << std::setw(3) << std::setfill('0') << (nanos.count() - micros.count() * 1000);
    }
    return ss.str();
}

std::mutex _write_mtx;

void write_num(std::uint64_t num, const std::string &file_name = "log.txt")
{
    std::lock_guard<std::mutex> _lock_guard(_write_mtx);
    std::fstream w_file(file_name, std::ios::out);
    w_file << num << std::endl;
    w_file.close();
}

std::uint64_t read_num(const std::string &file_name = "log.txt")
{
    std::lock_guard<std::mutex> _lock_guard(_write_mtx);
    std::uint64_t num = 0;
    std::fstream r_file(file_name, std::ios::in);
    std::string line;
    getline(r_file, line);
    if (line != "")
    {
        num = std::stoll(line);
    }
    return num;
}

void print_num()
{
    static std::uint64_t num = 0;
    while (1)
    {
        num = read_num();
        std::cout << ++num<<",thread id:"<<std::this_thread::get_id()<<","<<get_time_now()<< std::endl;
        write_num(num);
        std::this_thread::sleep_for(std::chrono::seconds(1));
    }
}

int main(int agrs, char **argv)
{
    print_num();
    std::cout << get_time_now() << ",thread id:" << std::this_thread::get_id() << ",finished in " << __FUNCTION__ << std::endl;
}

 

 

Compile

g++-12 -std=c++2a -I. *.cpp -o h1 -luuid -lpthread

 

 

 

 

 

 

标签:std,multi,via,uuid,chrono,better,file,time,include
From: https://www.cnblogs.com/Fred1987/p/17486251.html

相关文章

  • multiprocessing
    ProcessPools1.apply(func[,args[,kwds]])只能执行1次(只能输入一次参数)支持多个参数(参数统一为元祖类型)阻塞(只能等待这行代码执行完,才会执行下面的代码)返回结果为函数执行结果2.apply_async(func[,args[,kwds[,callback[,error_callback]]]])异步,不阻塞(子进......
  • 用 boost::multi_index 管理玩家
    用boost::multi_index管理玩家(金庆的专栏)网游服务器上的玩家集合需要多种索引:如用ID查找,角色名查找,用登录时分配的会话ID查找。用boost::multi_index进行玩家的管理,可在该容器上建立多种索引。classPlayer{public:constPlayerId&GetId......
  • DBeaver Ultimate Edtion 23.1 Multilingual (macOS, Linux, Windows) - 通用数据库工
    DBeaverUltimateEdtion23.1Multilingual(macOS,Linux,Windows)-通用数据库工具,现已集成ChatGPTOnetoolforalldatasources请访问原文链接:https://sysin.org/blog/dbeaver-23/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org通用数据库工具DBeaver是......
  • 利用Theano理解深度学习——Multilayer Perceptron
    一、多层感知机MLP1、MLP概述对于含有单个隐含层的多层感知机(single-hidden-layerMulti-LayerPerceptron,MLP),可以将其看成是一个特殊的Logistic回归分类器,这个特殊的Logistic回归分类器首先通过一个非线性变换(non-lineartransformation)对样本的输入进行非线性变换,然后将变......
  • 浅谈MultipartFile中transferTo方法的坑 服务器上面使用相对路径 file.transferTo(fil
    浅谈MultipartFile中transferTo方法的坑服务器上面使用相对路径file.transferTo(filePath.getAbsoluteFile())而不是file.transferTo(filePath.getPath())绝对路径,实际生产配置服务器里面的一个文件夹。比如配置服务器文件夹前缀为/downfile/excelfile原文链接:https://ww......
  • Multi-gate Mixture-of-Experts(MMoE)
    1.概述在工业界经常会面对多个学习目标的场景,如在推荐系统中,除了要给用户推荐刚兴趣的物品之外,一些细化的指标,包括点击率,转化率,浏览时长等等,都会作为评判推荐系统效果好坏的重要指标,不同的是在不同的场景下对不同指标的要求不一样而已。在面对这种多任务的场景,最简单最直接的方法......
  • 2021百度之星- 复赛 Add or Multiply 1 第二类斯特林数计数
    AddorMultiply1本质上这个题目中乘法和加法没有任何区别因为加法乘法均满足交换律不妨考虑乘法最后分成了k块每块内部没有顺序但是块之间有顺序有顺序共有m个乘法操作这样的方案数是\(s(m,k)k!\)这个时候要求k-1个空隙必须有加法但是开头和结尾可以有也可以没有这个......
  • 【841】shapely合并多个Polygon/MultiPolygon
    参考:Convertinglistofpolygonstomultipolygonusingshapely?MultiPolygon->Polygonlistlist(multiPoly.geoms)Polygonlist->MultiPolygonshapely.geometry.MultiPolygon([poly1,poly2,poly3,poly4,poly5]) ......
  • 将MultipartFile对象转换成File对象
    将MultipartFile对象转换成File对象//将MultipartFile对象转换成File对象privateFileconvertToFile(MultipartFilemultipartFile)throwsIOException{//获取文件名StringfileName=Objects.requireNonNull(multipartFile.getOriginalFilename......
  • 端到端神经视频编码=A Better Trade-off ?
    归根结底,每一种视频压缩方法都要权衡利弊(trade-off):如果允许更大的文件大小,就可以拥有更好的图像质量;但如果想让文件非常小,那就必须要容忍错误出现的概率。但现在(以及不久的将来),人们希望基于神经网络的方法能够在视频文件大小和质量之间做出更好的权衡与交换(abettertrade-off)。 ......