#include<iostream>
#include<mutex>
#include<thread>
#include<vector>
#include<map>
#include<functional>
#include<algorithm>
#include<string>
#include<iomanip>
#include<list>
#include<time.h>
#include<condition_variable>
std::condition_variable cv;
typedef struct {
char Item[64];
int Id;
int Priori;
int Times;
}DataPackge;
using namespace std;
std::list<int> chekl;
std::mutex mymutex;
bool i = false;
bool j = false;
typedef int(*Function)(int);
class Task_t
{
public:
Task_t() {}
Task_t(string a, int i)
{
Priori = i;
}
Task_t(string item, int id, int priori, int times) :Item(item), Id(id), Priori(priori), Times(times) {}
public:
string Item;
int Id;
int Priori;
int Times;
};
struct Priori
{
bool operator ()(Task_t &st1, Task_t &st2)
{
return (st1.Priori < st2.Priori);
}
};
int InputApple(int number)
{
for (int i = 0; i < number; ++i)
{
cout << i << endl;
}
return 0;
}
int InputOrange(int number)
{
for (int i = 0; i < number; ++i)
{
cout << i << endl;
}
return 0;
}
int InputBanana(int number)
{
for (int i = 0; i < number; ++i)
{
cout << i << endl;
}
return 0;
}
int OutputApple(int number)
{
for (int i = 0; i < number; ++i)
{
cout << i << endl;
}
return 0;
}
int OutputOrange(int number)
{
for (int i = 0; i < number; ++i)
{
cout << i << endl;
}
return 0;
}
int OutputBanana(int number)
{
for (int i = 0; i < number; ++i)
{
cout << i << endl;
}
return 0;
}
Function function_list[10] = {
InputApple,
InputOrange,
InputBanana,
OutputApple,
OutputOrange,
OutputBanana
};
typedef enum {
INPUTAPPLE,
INPUTORANGE,
INPUTBANANA,
OUTPUTAPPLE,
OUTPUTORANGE,
OUTPUTBANANA
}ls;
std::map<Function, DataPackge> FunctionQueue;
std::map<Function, DataPackge>::iterator lv;
std::vector<Task_t> ll;
std::vector<Task_t>::iterator lvb;
int run()
{
while (1)
{
unique_lock<std::mutex> lk(mymutex);
cv.wait(lk, [] {return i;});
i = false;
j = true;
sort(ll.begin(),ll.end(), Priori());
if (5 != (ll.end() - ll.begin()))
{
cv.notify_one();
continue;
}
else
{
Task_t it = ll.front();
cout << "Item:";
cout << it.Item << endl;
cout << "Id:";
cout << it.Id << endl;
cout << "Priori:";
cout << it.Priori << endl;
cout << "Times:";
cout << it.Times << endl;
}
cv.notify_one();
}
return 0;
}
int CheckCode(int n)
{
#include<mutex>
#include<thread>
#include<vector>
#include<map>
#include<functional>
#include<algorithm>
#include<string>
#include<iomanip>
#include<list>
#include<time.h>
#include<condition_variable>
std::condition_variable cv;
typedef struct {
char Item[64];
int Id;
int Priori;
int Times;
}DataPackge;
using namespace std;
std::list<int> chekl;
std::mutex mymutex;
bool i = false;
bool j = false;
typedef int(*Function)(int);
class Task_t
{
public:
Task_t() {}
Task_t(string a, int i)
{
Priori = i;
}
Task_t(string item, int id, int priori, int times) :Item(item), Id(id), Priori(priori), Times(times) {}
public:
string Item;
int Id;
int Priori;
int Times;
};
struct Priori
{
bool operator ()(Task_t &st1, Task_t &st2)
{
return (st1.Priori < st2.Priori);
}
};
int InputApple(int number)
{
for (int i = 0; i < number; ++i)
{
cout << i << endl;
}
return 0;
}
int InputOrange(int number)
{
for (int i = 0; i < number; ++i)
{
cout << i << endl;
}
return 0;
}
int InputBanana(int number)
{
for (int i = 0; i < number; ++i)
{
cout << i << endl;
}
return 0;
}
int OutputApple(int number)
{
for (int i = 0; i < number; ++i)
{
cout << i << endl;
}
return 0;
}
int OutputOrange(int number)
{
for (int i = 0; i < number; ++i)
{
cout << i << endl;
}
return 0;
}
int OutputBanana(int number)
{
for (int i = 0; i < number; ++i)
{
cout << i << endl;
}
return 0;
}
Function function_list[10] = {
InputApple,
InputOrange,
InputBanana,
OutputApple,
OutputOrange,
OutputBanana
};
typedef enum {
INPUTAPPLE,
INPUTORANGE,
INPUTBANANA,
OUTPUTAPPLE,
OUTPUTORANGE,
OUTPUTBANANA
}ls;
std::map<Function, DataPackge> FunctionQueue;
std::map<Function, DataPackge>::iterator lv;
std::vector<Task_t> ll;
std::vector<Task_t>::iterator lvb;
int run()
{
while (1)
{
unique_lock<std::mutex> lk(mymutex);
cv.wait(lk, [] {return i;});
i = false;
j = true;
sort(ll.begin(),ll.end(), Priori());
if (5 != (ll.end() - ll.begin()))
{
cv.notify_one();
continue;
}
else
{
Task_t it = ll.front();
cout << "Item:";
cout << it.Item << endl;
cout << "Id:";
cout << it.Id << endl;
cout << "Priori:";
cout << it.Priori << endl;
cout << "Times:";
cout << it.Times << endl;
}
cv.notify_one();
}
return 0;
}
int CheckCode(int n)
{
//return 1;
return 0;
}
int fun()
{
while (1)
{
unique_lock<std::mutex> lk(mymutex);
cv.wait(lk, [] {return j;});
j = false;
i = true;
int checkcod;
cout << "Do you want creat project!" << endl;
cout << "YES && NO YES PRESS 1,NO PRESS 2" << endl;
cin >> checkcod;
if (1 == checkcod)
{
Task_t h;
cout << "Please input !" << endl;
cout << "Please input project" << endl;
cout << "Item:";
cin >> h.Item;
cout << "Id:";
cin >> h.Id;
cout << "Priori:";
cin >> h.Priori;
cout << "Times:";
cin >> h.Times;
ll.push_back(h);
}
cout << "nimei" << endl;
cv.notify_one();
}
return 0;
}
return 0;
}
int fun()
{
while (1)
{
unique_lock<std::mutex> lk(mymutex);
cv.wait(lk, [] {return j;});
j = false;
i = true;
int checkcod;
cout << "Do you want creat project!" << endl;
cout << "YES && NO YES PRESS 1,NO PRESS 2" << endl;
cin >> checkcod;
if (1 == checkcod)
{
Task_t h;
cout << "Please input !" << endl;
cout << "Please input project" << endl;
cout << "Item:";
cin >> h.Item;
cout << "Id:";
cin >> h.Id;
cout << "Priori:";
cin >> h.Priori;
cout << "Times:";
cin >> h.Times;
ll.push_back(h);
}
cout << "nimei" << endl;
cv.notify_one();
}
return 0;
}
int main()
{
j = true;
std::vector<std::thread> Lv;
Lv.push_back(std::move(std::thread(run)));
cv.notify_one();
Lv.push_back(std::move(std::thread(fun)));
for (auto & thr : Lv)
{
thr.join();
}
}
{
j = true;
std::vector<std::thread> Lv;
Lv.push_back(std::move(std::thread(run)));
cv.notify_one();
Lv.push_back(std::move(std::thread(fun)));
for (auto & thr : Lv)
{
thr.join();
}
}