1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
| #include <iostream>
#include <thread>
#include <windows.h>
#include <fstream>
#include <string>
#include <sstream>
#include <mutex>
#include <stdlib.h>
#include <queue>
using namespace std;
int main()
{ mutex lock;
string entry="",entry2="",output2;
stringstream stream;
stringstream stream2;
int i,n,r,position;
int h=0,m=0;
float s=0;
queue <string> output;
thread t1 ([&h,&s,&m,&position,&entry,&entry2,&stream,&n,&stream2,&i,&output,&r,&lock](){
while(1)
{s+=0.1;
if (s==60)
{s=0;m+=1;}
if (m==60)
{m=0;h+=1;}
stream<<h<<" "<<m<<" "<<s<<endl;;
entry=stream.str();
stream.str("");
//entry+="\n";
n=entry.length();
r=5+(int)(10*s)%4;
entry=entry2+entry;
entry2=entry.substr(r,n);
entry=entry.substr(0,r);//entry est juste une simulation d'une entrée que je pourais obtenir.
n=entry.length();
for(i=0;i<n;i++)
{
stream2<<entry[i];
if(entry[i]=='\n')
{
lock.lock();
output.push(stream2.str());
lock.unlock();
stream2.str("");
}
}
Sleep(100);
}
});
thread t2 ([&output,&output2,&lock](){
while(1){
lock.lock();
if(!output.empty()) output2=output.front(),
lock.unlock();
cout<<output2;
if(output2!="")
{
try{
cout<<"h= "<<output2.substr(0,output2.find(" "));
output2=output2.substr(output2.find(" ")+1);
cout<<" m= "<<output2.substr(0,output2.find(" "));
output2=output2.substr(output2.find(" ")+1);
cout<<" s= "<<output2.substr(0,output2.find(" "))<<endl;
}
catch(std::out_of_range& er){}
catch(std::invalid_argument& e){}
}
}
});
t1.join();
t2.join();
return 0; |
Partager