83 lines
1.6 KiB
C++
83 lines
1.6 KiB
C++
// globals.h
|
|
#ifndef GLOBALS_H
|
|
#define GLOBALS_H
|
|
|
|
#include <MIL.h>
|
|
#include <QMutex>
|
|
#include <opencv2/opencv.hpp>
|
|
#include <QSemaphore>
|
|
#include <QDir>
|
|
#include <QCoreApplication>
|
|
|
|
// 图片显示0
|
|
extern QMutex gDispPicMutex0;
|
|
extern MIL_ID gDispCurrentPicId0;
|
|
|
|
// 图片显示1
|
|
extern QMutex gDispPicMutex1;
|
|
extern MIL_ID gDispCurrentPicId1;
|
|
|
|
extern QMutex gMaskMutex0;
|
|
extern MIL_ID gMask0;
|
|
|
|
extern QMutex gMaskMutex1;
|
|
extern MIL_ID gMask1;
|
|
|
|
extern QSemaphore detection_ready;
|
|
|
|
QString getSaveDirectory();
|
|
QString getConfigDirectory();
|
|
|
|
// 定义一个结构体来存储图像数据及其来源相机ID
|
|
struct ImageData
|
|
{
|
|
int camera_id;
|
|
cv::Mat image;
|
|
};
|
|
|
|
template <typename T>
|
|
class ThreadSafeQueue{
|
|
public:
|
|
// 添加元素到队列
|
|
void enqueue(const T& item)
|
|
{
|
|
std::unique_lock<std::mutex> lock(mutex_);
|
|
queue_.push(item);
|
|
cond_var_.notify_one();
|
|
}
|
|
|
|
// 从队列中移除并获取元素
|
|
bool dequeue(T& item)
|
|
{
|
|
std::unique_lock<std::mutex> lock(mutex_);
|
|
while (queue_.empty() && !stop_)
|
|
{
|
|
cond_var_.wait(lock);
|
|
}
|
|
if (queue_.empty())
|
|
return false;
|
|
item = std::move(queue_.front());
|
|
queue_.pop();
|
|
return true;
|
|
}
|
|
|
|
// 停止队列,唤醒所有等待的线程
|
|
void stop()
|
|
{
|
|
std::unique_lock<std::mutex> lock(mutex_);
|
|
stop_ = true;
|
|
cond_var_.notify_all();
|
|
}
|
|
|
|
private:
|
|
std::queue<T> queue_;
|
|
std::mutex mutex_;
|
|
std::condition_variable cond_var_;
|
|
bool stop_ = false;
|
|
};
|
|
|
|
|
|
// 定义全局存储队列
|
|
extern ThreadSafeQueue<ImageData> g_storageQueue;
|
|
#endif // GLOBALS_H
|