c++ builder 6 两个线程分别读写 ini文件

//

//本文在c++ builder 6.0平台调试通过
#include <vcl.h>
#include <fstream>
#include <syncobjs.hpp>// TCriticalSection 需要这个头文件
#include <inifiles.hpp>
#include <MyThread1.h>
#include <MyThread2.h>
#include <iostream>       // std::cout
using namespace std;
volatile int Counter(0); // 定义一个全局变量,当做计数器用于累加

int _tmain(int argc, _TCHAR* argv[])
{


    TCriticalSection  * Mtx=new TCriticalSection() ;
    const int num=1;
    MyThread1 * myThreadArray[num];
    for (int i=0;i<num;i++)
    {
        myThreadArray[i]=new MyThread1(&Counter,Mtx,false); //写线程
       // myThreadArray[i]->Resume();//恢复线程
    }

    MyThread2 * myThread2=new MyThread2(&Counter,Mtx,false);//读线程
    for (int i=0;i<num;i++)
    {
      myThreadArray[i]->WaitFor();
    }

    //myThread1->WaitFor();
    myThread2->WaitFor();
    for (int i=0;i<num;i++)
    {
        delete myThreadArray[i];
    }
    //delete myThread1;
    delete myThread2;
    delete Mtx;

    system("pause");
    return 0;

}

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
#include "Unit1.cpp"
#include "MyThread1.h"
#include <iostream>       // std::cout
#include <syncobjs.hpp>// TCriticalSection 需要这个头文件
#include <fstream>
#include <inifiles.hpp>
#pragma package(smart_init)
//---------------------------------------------------------------------------
  using namespace std;
__fastcall MyThread1::MyThread1(volatile int * pCounter,TCriticalSection  * Mtx,bool CreateSuspended)
        : pcounter(pCounter),mtx(Mtx),TThread(CreateSuspended)
{
}
//---------------------------------------------------------------------------
void __fastcall MyThread1::Execute()
{
      // while(!Terminated)
       {
        writeCoordinate();
        }
}
//---------------------------------------------------------------------------
void __fastcall MyThread1:: writeCoordinate()
{   //while ((*pcounter)<10)//退出循环条件,counter=10 ,根据情况改条件
   // {
    mtx->Acquire();   //互斥锁上锁
    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);
   // (*pcounter)=(*pcounter)+1;
   ++(*pcounter);
    delete pIni;
    mtx->Release();  //互斥锁解锁
    //Sleep(1);
   // }

//---------------------------------------------------------------------------
#include <vcl.h>
#ifndef MyThread1H
#define MyThread1H
#include <syncobjs.hpp>// TCriticalSection 需要这个头文件
//---------------------------------------------------------------------------
#include <Classes.hpp>
//---------------------------------------------------------------------------
class MyThread1 : public TThread
{            
private:
     TCriticalSection  * mtx;
     volatile int * pcounter;
protected:
        void __fastcall Execute();
        void __fastcall  writeCoordinate();
public:
        __fastcall MyThread1(volatile int * pCounter,TCriticalSection  * Mtx,bool CreateSuspended);
};
//---------------------------------------------------------------------------

#endif

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "MyThread2.h"
#include <iostream>       // std::cout
#include <syncobjs.hpp>// TCriticalSection 需要这个头文件
#include <fstream>
#include <inifiles.hpp>
#pragma package(smart_init)
//---------------------------------------------------------------------------
  using namespace std;
  volatile int counter(0); // 定义一个全局变量,当做计数器用于累加
__fastcall MyThread2::MyThread2( volatile int * pCounter,TCriticalSection  * Mtx,bool CreateSuspended)
         : pcounter(pCounter),mtx(Mtx),TThread(CreateSuspended),temp(0)
{
    //
}
//---------------------------------------------------------------------------
void __fastcall MyThread2::Execute()
{
        //---- Place thread code here ----
       // while (!Terminated)
        {
           readCoordinate();

        }
}
//---------------------------------------------------------------------------
void __fastcall MyThread2::readCoordinate()
{
   // while ((*pcounter)<3) //退出循环条件,counter=10,根据情况改条件
    {
      mtx->Acquire();   //互斥锁上锁
      TIniFile *pIni = new TIniFile("d:\\test2.ini");//
      char x[50]={0};char y[50]={0};char z[50]={0};char time[50]={0};
     // AnsiString x,y,z,time;
      sprintf(x,"%s",pIni->ReadString("坐标","x","未知"));
      sprintf(y,"%s",pIni->ReadString("坐标","y","未知"));
      sprintf(z,"%s",pIni->ReadString("坐标","z","未知"));
      sprintf(time,"%s",pIni->ReadString("坐标","time","未知"));
     // if(*pcounter>temp)
     // {
          cout<<*pcounter<<endl;
          printf(x);printf("\n") ;
          printf(y);printf("\n") ;
          printf(z);printf("\n") ;
          printf(time);printf("\n");
          cout<<"---"<<endl;
          temp = *pcounter;
    // }

      delete pIni;
       mtx->Release();  //互斥锁解锁
     //  Sleep(2);
    }

}

//---------------------------------------------------------------------------

#ifndef MyThread2H
#define MyThread2H
//---------------------------------------------------------------------------
#include <syncobjs.hpp>// TCriticalSection 需要这个头文件
#include <MyThread1.h>
#include <Classes.hpp>
//---------------------------------------------------------------------------
class MyThread2 : public TThread
{            
private:
      TCriticalSection  * mtx;
       volatile int * pcounter;
       int temp;
protected:
        void __fastcall Execute();
         void __fastcall MyThread2::readCoordinate();
public:
        __fastcall MyThread2( volatile int * pCounter,TCriticalSection  * Mtx,bool CreateSuspended);
};
//---------------------------------------------------------------------------

#endif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值