亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 2900 | 回復(fù): 4
打印 上一主題 下一主題

[C++] 在壇子里找到的線程安全的隊列代碼,咋用??? [復(fù)制鏈接]

論壇徽章:
1
2015年辭舊歲徽章
日期:2015-03-03 16:54:15
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2016-04-08 18:31 |只看該作者 |倒序瀏覽
本帖最后由 jd808 于 2016-04-08 19:48 編輯

  1. #include <pthread.h>
  2. #include <iostream>
  3. #include <queue>

  4. #define QUEUESIZE 10

  5. template <class Object>
  6. class ThreadQueue {
  7.         private:
  8.                 std::queue <Object> que;
  9.                 int size;
  10.                 pthread_mutex_t mutex;

  11.         public:
  12.                 ThreadQueue();
  13.                 ~ThreadQueue();

  14.         public:
  15.                 bool IsEmpty() const;
  16.                 void Push(const Object &obj);
  17.                 void Pop();
  18.                 int Count() const;
  19.                 Object& Front();
  20.                 Object& Back();
  21.                 void Clear();
  22. };

  23. class UserSendCache {
  24.         private:


  25.         public:
  26.                 UserSendCache();
  27.                 ~UserSendCache();

  28.         public:

  29. };



  30. template <class Object>
  31. ThreadQueue<Object>::ThreadQueue()
  32. {
  33.     pthread_mutex_init(&mutex, NULL);
  34.     size = 0;
  35. }

  36. template <class Object>
  37. ThreadQueue<Object>::~ThreadQueue()
  38. {
  39.     pthread_mutex_destroy(&mutex);
  40. }

  41. template <class Object>
  42. bool ThreadQueue<Object>::IsEmpty() const
  43. {
  44.     if(size == 0)
  45.         return true;
  46.     else
  47.         return false;
  48. }

  49. //從隊列尾部添加數(shù)據(jù)
  50. template <class Object>
  51. void ThreadQueue<Object>::Push(const Object &obj)
  52. {
  53.     pthread_mutex_lock(&mutex);
  54.     if(que.size()==QUEUESIZE){//已經(jīng)滿了,刪除最開始那個,然后在加入,保證隊列始終不超過QUEUESIZE
  55.             que.pop();
  56.     }

  57.     que.push(obj);
  58.     size = que.size();
  59.     pthread_mutex_unlock(&mutex);
  60. }

  61. //隊列頭部數(shù)據(jù)出隊
  62. template <class Object>
  63. void ThreadQueue<Object>::Pop()
  64. {
  65.     pthread_mutex_lock(&mutex);
  66.     que.pop();
  67.     size = que.size();
  68.     pthread_mutex_unlock(&mutex);
  69. }

  70. template <class Object>
  71. int ThreadQueue<Object>::Count() const
  72. {
  73.     return(size);
  74. }

  75. //返回隊列頭部數(shù)據(jù)
  76. template <class Object>
  77. Object& ThreadQueue<Object>::Front()
  78. {
  79.     pthread_mutex_lock(&mutex);
  80.     Object &obj = que.front();
  81.     pthread_mutex_unlock(&mutex);
  82.     return obj;
  83. }

  84. //返回隊列尾部數(shù)據(jù)
  85. template <class Object>
  86. Object& ThreadQueue<Object>::Back()
  87. {
  88.     pthread_mutex_lock(&mutex);
  89.     Object &obj = que.back();
  90.     pthread_mutex_unlock(&mutex);
  91.     return obj;
  92. }

  93. template <class Object>
  94. void ThreadQueue<Object>::Clear()
  95. {
  96.     pthread_mutex_lock(&mutex);
  97.     while (!que.empty())
  98.     {
  99.       que.pop();
  100.     }
  101.     size = 0;
  102.     pthread_mutex_unlock(&mutex);
  103. }

  104. int main()
  105. {
  106. //      ThreadQueue<UserSendCache> t = new ThreadQueue<UserSendCache>();//這個也不行
  107.         ThreadQueue<UserSendCache> t();
  108.         const UserSendCache* d = new UserSendCache();
  109.         t.Push(d);
  110.     return 0;
  111. }
復(fù)制代碼
在壇里找到了這個隊列代碼,咋用?
ThreadQueue<UserSendCache> t = new ThreadQueue<UserSendCache>();
用這個代碼編譯直接報
/usr/include/c++/5/bits/stl_construct.h:93:對‘UserSendCache::~UserSendCache()’未定義的引用
/usr/include/c++/5/bits/stl_construct.h:93:對‘UserSendCache::~UserSendCache()’未定義的引用
/usr/include/c++/5/bits/stl_construct.h:93:對‘UserSendCache::~UserSendCache()’未定義的引用
/usr/include/c++/5/bits/stl_construct.h:93:對‘UserSendCache::~UserSendCache()’未定義的引用
/usr/include/c++/5/bits/stl_construct.h:93:對‘UserSendCache::~UserSendCache()’未定義的引用
gateway/src/ThreadQueue.o:/usr/include/c++/5/bits/stl_construct.h:93: 跟著更多未定義的參考到 UserSendCache::~UserSendCache()
collect2: error: ld returned 1 exit status

用這個ThreadQueue<UserSendCache> t();

error: request for member ‘Push’ in ‘t’, which is of non-class type ‘ThreadQueue<UserSendCache>()’

論壇徽章:
6
技術(shù)圖書徽章
日期:2013-11-13 11:11:27子鼠
日期:2014-02-20 17:54:13處女座
日期:2014-06-16 17:43:33午馬
日期:2014-08-08 09:11:17未羊
日期:2014-08-10 11:57:072015年辭舊歲徽章
日期:2015-03-03 16:54:15
2 [報告]
發(fā)表于 2016-04-11 08:58 |只看該作者
吐槽不能。

論壇徽章:
1
2015年辭舊歲徽章
日期:2015-03-03 16:54:15
3 [報告]
發(fā)表于 2016-04-12 10:04 |只看該作者
不會用模板呀,沒人告訴我?

論壇徽章:
1
2015年辭舊歲徽章
日期:2015-03-03 16:54:15
4 [報告]
發(fā)表于 2016-04-12 11:17 |只看該作者
哎,注意到了,原來少了UserSendCache的構(gòu)造和析構(gòu),開始以為是ThreadQueue少了,看代碼又有,搞得我折騰了半天

論壇徽章:
1
2015年辭舊歲徽章
日期:2015-03-03 16:54:15
5 [報告]
發(fā)表于 2016-04-12 11:18 |只看該作者
話說,這么明顯的,壇子里也沒人幫忙看下,有時候鉆進去一下子出不來~~~~
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP