Hi,
I tried to use boost/thread library to write a program to read a large text file. The program compiled but did not get the right answer. I am not sure my usage of the library is correct. I appreciate your helps.
Here are the code:
#include <iostream>
#include <fstream>
#include <string>
#include <boost/thread/thread.hpp>
#include <boost/thread/mutex.hpp>
#include <boost/bind.hpp>
#include <SQLAPI.h>
//#include "stdafx.h"
boost::mutex io_mutex;
using namespace std;
void mtread(char* filename,const int stidx, const int edidx,int id) {
fstream infile;
infile.open(filename);
string line;
if (infile.good()){
for (int linenum=stidx; linenum<=edidx;linenum++) {
boost::mutex::scoped_lock lock(io_mutex);
infile.seekg(linenum,ios::beg);
getline(infile,line);
cout<<id << " : " <<line<<endl;
}
}
else
{ cerr<< "file " << filename << " cannot be opened for reading" <<endl;
}
infile.close();
}
int main(int argc, char** argv){
boost::thread thrd1(boost::bind(&mtread, argv[1],0,4,1));
boost::thread thrd2(boost::bind(&mtread, argv[1],5,9,2));
thrd1.join();
thrd2.join();
return 0;
}
I would like thread1 read linie 0-4 and thread2 read line 5-9. My dummy test file has 10 lines, each line is 1,2, 3...,10 etc. My output is
2 :
2 : 3
2 :
2 :
1 : 1
1 :
1 :
1 : 2
1 :
2 : 4
regards,
Gang Ma