有问题可以问哈,一共建3个文件,如下:
main.cpp文件
#include <iostream>
#include <sstream>
#include <fstream>
#include <string>
#include <thread>
#include "cmdLine.h"
#include "mutlithread.h"
int main(int argc, char *argv[])
{
std::string inputPath = "/media/add7/E/testData/testThreads/";
std::vector<std::string> fileNameList;
for(std::size_t i = 0; i < 20; ++i)
{
std::stringstream ss;
ss << i;
std::string s;
ss >> s;
std::string tempPath = inputPath + "/" + s + ".txt";
fileNameList.push_back(tempPath);
}
MutliThread myThread;
myThread.initialization("/media/add7/E/testData/testThreads/out/");
while(true)
{
if(MutliThread::writeFinish && MutliThread::showFinish)
break;
std::thread th1(MutliThread::readFile, &fileNameList, &myThread);
std::thread th2(MutliThread::showFile);
std::thread th3(MutliThread::writeFile, &myThread);
std::cout << "join th1" << std::endl;
th1.join();
std::cout << "join th2" << std::endl;
th2.join();
std::cout << "join th3" << std::endl;
th3.join();
}
std::cout << "threads exit !" << std::endl;
return 1;
}
针对多线程中常见的生产者消费者问题,封装了一个类,和测试代码,方便日后直接套用。
具体来说就是多线程使用时候经常遇到的 “一个线程取数据,一个处理数据,一个保存或传递数据 的情况” 。
简单说一下程序功能,很简单的一个应用,就是从某指定文件夹路径下读取文件名为 0-19.txt 的文件内容(此处一个线程),输出到控制台(此处一个线程),并向 out 文件夹中再写入这些文件内容(此处一个线程)。其中读取线程为生产者,显示保存线程为消费者。一个共享链表作为临界区,读取线程向里面 push 数据,读取线程与保存线程均处理完后erase 该数据。
#include <iostream>
#include <sstream>
#include <fstream>
#include <string>
#include <thread>
#include "cmdLine.h"
#include "mutlithread.h"
int main(int argc, char *argv[])
{
std::string inputPath = "/media/add7/E/testData/testThreads/";
std::vector<std::string> fileNameList;
for(std::size_t i = 0; i < 20; ++i)
{
std::stringstream ss;
ss << i;
std::string s;
ss >> s;
std::string tempPath = inputPath + "/" + s + ".txt";
fileNameList.push_back(tempPath);
}
MutliThread myThread;
myThread.initialization("/media/add7/E/testData/testThreads/out/");
while(true)
{
if(MutliThread::writeFinish && MutliThread::showFinish)
break;
std::thread th1(MutliThread::readFile, &fileNameList, &myThread);
std::thread th2(MutliThread::showFile);
std::thread th3(MutliThread::writeFile, &myThread);
std::cout << "join th1" << std::endl;
th1.join();
std::cout << "join th2" << std::endl;
th2.join();
std::cout << "join th3" << std::endl;
th3.join();
}
std::cout << "threads exit !" << std::endl;
return 1;
}