cotton_double/globals.h

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