在主線程下有兩個執行緒:跟蹤和檢測,該工程主要功能是通過檢測機制檢測出目標後,將目標位置傳送給跟蹤執行緒進行跟蹤,當然跟蹤過程中會一直進行目標的檢測,以免出現跟蹤過程中的跟丟現象。
cmakelists.txt 【ubuntu 14.04 安裝 opencv-3.2.0】
main.cppcmake_minimum_required(version 2.8)
project( multithread )
set(cmake_cxx_flags "$ -wall -std=c++11 -pthread")
set(cmake_verbose_makefile off)
# 尋找opencv庫
# set(cmake_prefix_path "/home/hwj/3rdparty/opencv/v2.4.13/lib")
# find_package( opencv 2.4.13 required )
find_package( opencv 3.2 required )
# 新增標頭檔案
include_directories( $ )
include_directories( $ )
add_executable( multithreaddemo main.cpp )
add_library( objecttracker shared objecttracker.cpp )
add_library( objectdectector shared objectdectector.cpp )
add_library( robottracker shared robottracker.cpp )
# 鏈結opencv庫
target_link_libraries( objecttracker $ )
target_link_libraries( objectdectector $ )
target_link_libraries( robottracker objectdectector objecttracker $ )
target_link_libraries( multithreaddemo robottracker)
#include "robottracker.h"
int main(int argc, char** argv)
robottracker.h
robottracker.cpp#ifndef _robot_tracker_h
#define _robot_tracker_h
#include
#include
#include
#include
#include // for std::thread
#include // for std::mutex
#include // for std::queue
#include // for std::condition_variable
#include // for std::bind
#include "objectdectector.h"
#include "objecttracker.h"
typedef
enumeimageflag;
typedef
structstdata;
typedef
enumetrackerstatus;
typedef
enumethreadsstatus;
class robottracker;
#endif
build#include "robottracker.h"
robottracker::robottracker(const
std::string &videopath)
robottracker::~robottracker()
void robottracker::objecttrackerthread(const
std::string &videopath)
etrackerstatus trackstatus = tracking_prepare;
stdata stdataafterdetection;
while(1)
if(trackstatus == tracking_running)
cv::imshow(m_imgwinname, mattmp);
int key = cv::waitkey(10);
if(key == 27)
}else
}} void robottracker::objectdetectionthread()
if(isstartdetection)
}} bool robottracker::isdataqueueempty()
bool robottracker::isdataqueuenotempty()
void robottracker::pushdatatoqueue(const stdata &data)
bool robottracker::popdatafromqueue(stdata &data)
else
return
false;
} ethreadsstatus robottracker::getthreadsstatus()
void robottracker::setthreadsstatus(ethreadsstatus status)
bool robottracker::getexittrackerstatus()
void robottracker::setexittrackerstatus(bool status)
$ cd build
$ cmake ..
$ make
run the project
$ sudo ./multithreaddemo
yamingwu csdn : c++11 併發程式設計系列部落格
c++11 中的執行緒、鎖和條件變數
c++11 實現生產者消費者模式
c++11 實現觀察者模式
C 11 多執行緒
新特性之描述 雖然 c 11 會在語言的定義上提供乙個記憶體模型以支援執行緒,但執行緒的使用主要將以 c 11 標準庫的方式呈現。c 11 標準庫會提供型別 thread std thread 若要執行乙個執行緒,可以建立乙個型別 thread 的實體,其初始引數為乙個函式物件,以及該函式物件所需要...
c 11 多執行緒
1.多執行緒的原理 同一時間內,cpu只能處理1條執行緒,只有1條執行緒在工作 執行 多執行緒併發 同時 執行,其實是cpu快速地在多條執行緒之間排程 切換 如果cpu排程執行緒的時間足夠快,就造成了多執行緒併發執行的假象。思考 如果執行緒非常非常多,會發生什麼情況?cpu會在n多執行緒之間排程,c...
C 11 多執行緒
2011 年 c 迎來重大的改革 語言層面上承認了 多執行緒 程式的存在 加入了 thread 多執行緒支援庫,內容豐富 功能強大。首先從我個人理解角度粗鄙的理解一下多執行緒。多執行緒眾所周知 切割時間片的多程式併發執行,大多數的計算機都支援多執行緒併發的硬體支援。這可能是最簡單的多執行緒程式了。多...