zoukankan      html  css  js  c++  java
  • 多线程任务队列的实现

     1 #include <boost/thread.hpp>
     2 #include <boost/thread/mutex.hpp>
     3 #include <boost/date_time/posix_time/posix_time.hpp>
     4 #include <list>
     5 
     6 
     7 struct Task
     8 {
     9     std::string str;
    10 };
    11 
    12 class QueueTest
    13 {
    14 public:
    15     QueueTest(void)
    16     {
    17     }
    18     ~QueueTest(void)
    19     {
    20     }
    21 
    22 public:
    23     void Put(const Task& item)
    24     {
    25         boost::mutex::scoped_lock lock(m_mutex);
    26         m_list.push_back(item);
    27         m_condGet.notify_one();
    28     }
    29     void Get(Task& item)
    30     {
    31         boost::mutex::scoped_lock lock(m_mutex);
    32         while (IsEmpty())
    33         {
    34             m_condGet.wait(lock);
    35         }
    36         item = m_list.front();
    37         m_list.pop_front();
    38     }
    39 
    40 private:
    41     bool IsEmpty()
    42     {
    43         return m_list.empty();
    44     }
    45 
    46 private:
    47     std::list<Task> m_list;
    48 
    49     boost::mutex m_mutex;
    50     boost::condition_variable_any m_condGet;
    51 };
    52 
    53 QueueTest test;
    54 
    55 void ThreadFun1()
    56 {
    57     std::cout<<"thread1 run "<<std::endl;
    58     Task task;
    59     task.str = "ThreadFun1";
    60     test.Put(task);
    61     
    62 }
    63 
    64 void ThreadFun2()
    65 {
    66     Task task;
    67     task.str = "ThreadFun2";
    68     test.Put(task);
    69 }
    70 
    71 void ThreadFun3()
    72 {
    73     while(true)
    74     {
    75         Task task;
    76         test.Get(task);
    77         std::cout<<task.str<<std::endl;
    78     }
    79 }
    80 
    81 void ThreadFun4()
    82 {
    83     Task task;
    84     task.str = "ThreadFun4";
    85     test.Put(task);
    86 }
    87 
    88 
    89 int _tmain(int argc, _TCHAR* argv[])
    90 {
    91     boost::thread thread1(&ThreadFun1);
    92     boost::thread thread2(&ThreadFun2);
    93     boost::thread thread3(&ThreadFun3);
    94     boost::thread thread4(&ThreadFun4);
    95 
    96     system("pause");
    97     return 0;
    98 }
  • 相关阅读:
    微软小娜APP的案例分析
    嵌入式第12次实验
    嵌入式第11次实验
    嵌入式第10次实验报告
    嵌入式第9次实验
    软工 小组作业(第二次)
    嵌入式软件设计第8次实验报告-140201236-沈樟伟
    5月17下
    5月17上
    5月15上午
  • 原文地址:https://www.cnblogs.com/hui277/p/3385883.html
Copyright © 2011-2022 走看看