c++ builder 10.3 两线程读写ini文件 demo

//在实际工作中,常常遇到多线程读写同一文件的问题。

//如果读写的ini文件,本文能给你帮助。

//本文在c++ builder 10.3 平台调试通过。
#include <iostream>       // std::cout
#include <thread>         // std::thread
#include <mutex>          // std::mutex
#include <fstream>
#include <inifiles.hpp>

volatile int counter(0); // 定义一个全局变量,当做计数器用于累加

std::mutex mtx;           // 用于保护counter的互斥锁
using namespace std;
 void writeCoordinate()
{   while (counter<10)//退出循环条件,counter=10 ,根据情况改条件
    {
    mtx.lock();   //互斥锁上锁
    TIniFile *pIni = new TIniFile("d:\\test2.ini");//
    pIni->WriteString("坐标","x","1");
    pIni->WriteString("坐标","y","1");
    pIni->WriteString("坐标","z","1");
    TDateTime dt=Now();
    unsigned short year,month,day;
    unsigned short hour,min,sec,msec;
    dt.DecodeDate(&year,&month,&day);
    dt.DecodeTime(&hour, &min,&sec, &msec);
    char  time[50];
    sprintf(time,"%d.%d.%d %d:%d:%d %d",year,month,day,hour,min,sec,msec);
    pIni->WriteString("坐标","time",time);
    counter++;
    delete pIni;
    mtx.unlock();  //互斥锁解锁
    }
}
void readCoordinate()
{
    while (counter<10) //退出循环条件,counter=10,根据情况改条件
    {
      mtx.lock();   //互斥锁上锁
      TIniFile *pIni = new TIniFile("d:\\test2.ini");//
      AnsiString x,y,z,time;
      x=pIni->ReadString("坐标","x","未知");
      y=pIni->ReadString("坐标","y","未知");
      z=pIni->ReadString("坐标","z","未知");
      time=pIni->ReadString("坐标","time","未知");
      cout<<counter<<endl;
      cout<<x<<endl;
      cout<<y<<endl;
      cout<<z<<endl;
      cout<<time<<endl;
      cout<<"---"<<endl;
      delete pIni;
      mtx.unlock();  //互斥锁解锁
    }

}

int _tmain(int argc, _TCHAR* argv[])
{
    const int num=1;//写线程数量,可大于1
    std::thread threads[num];//线程数组
    std::thread thread1;//读线程,写可改成数组,

    for (int i = 0; i < num; ++i)
        threads[i] = std::thread(writeCoordinate);   //启动线程
        thread1 = std::thread(readCoordinate);   //启动1个线程
    for (auto& th : threads) th.join();   //等待10个线程结束
         thread1.join();

    system("pause");
    return 0;

}

 


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值