C 11 實現多執行緒(執行緒同步 通訊)例項的解析

2021-08-01 15:22:43 字數 3367 閱讀 3289

在主線程下有兩個執行緒:跟蹤檢測,該工程主要功能是通過檢測機制檢測出目標後,將目標位置傳送給跟蹤執行緒進行跟蹤,當然跟蹤過程中會一直進行目標的檢測,以免出現跟蹤過程中的跟丟現象。

cmakelists.txt 【ubuntu 14.04 安裝 opencv-3.2.0】

cmake_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)

main.cpp

#include "robottracker.h"

int main(int argc, char** argv)

robottracker.h

#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

robottracker.cpp

#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)

build

$ 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 多執行緒支援庫,內容豐富 功能強大。首先從我個人理解角度粗鄙的理解一下多執行緒。多執行緒眾所周知 切割時間片的多程式併發執行,大多數的計算機都支援多執行緒併發的硬體支援。這可能是最簡單的多執行緒程式了。多...