任务队列初稿

来源:互联网 发布:linux 给用户权限 编辑:程序博客网 时间:2024/06/05 09:44
#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)
{

 //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;
}

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();
 }
}
0 0