测试20260416
问题1、runner服务器无空间了,清理空间方法:
解决方法:docker container prune 删除停止的容器
docker volume prune 删除停止的磁盘
systemtcl restart docker 重启docker
问题2、当删除了磁盘volume,未删除container时,cicd构建报错
ERROR:Job failed (system failure) :Error response from daemon: get 37b70cxxxxxxxxxxxxxxxxxxxxxx: no such volume (executor_docker.go:932:0s)
解决方法:
1、按照问题的方法处理。
2、新建项目,复制原始项目的代码和上库记录。
3、修改runner 配置/etc/gitlab-runner/config.toml 中的对应runner的volume参数值,将 “cache”值删除。
#pragma once
#include <windows.h>
#include <string>
#include <vector>
#include <thread>
#include <atomic>
#include <functional>
#include <mutex>
class SerialPort {
public:
SerialPort();
~SerialPort();
bool open(const std::string& portName, unsigned long baudRate);
void close();
bool isOpen() const;
std::string getLastError() const;
// 发送数据(线程安全)
bool write(const std::vector<unsigned char>& data);
bool write(const std::string& s);
// 设置接收回调
void setReceiveCallback(std::function<void(const std::vector<unsigned char>&)> cb);
private:
void receiveLoop();
HANDLE m_handle;
std::atomic<bool> m_running;
std::thread m_thread;
std::string m_lastError;
std::function<void(const std::vector<unsigned char>&)> m_callback;
std::mutex m_writeMutex;
};
设计要点
std::atomic<bool> m_running:跨线程共享的运行标志,比 volatile bool 更安全。
std::mutex m_writeMutex:写操作加锁,保证多线程并发调用 write() 时的线程安全。
std::function 回调:用户可通过 lambda、函数指针等灵活注册数据接收处理逻辑。
RAII 析构:close() 在析构函数中自动调用,确保资源释放。
————————————————
逻辑说明:
- 循环读取,直到 m_running 为 false 或发生错误。
- ReadFile 在超时设置下最多阻塞 50ms,之后返回,即使未读到任何数据。
- 读到数据后:优先调用用户回调;无回调时默认打印 HEX + 可打印字符。
- 回调异常捕获:防止用户回调中的崩溃影响串口接收线程。
- 每次循环 sleep_for(10ms) 降低 CPU 占用。
————————————————
版权声明:本文为CSDN博主「沈跃泉」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_45834799/article/details/160124226



- 锁:
std::lock_guard保证多线程同时调用write()时不会产生竞态。 - 两个重载:一个接受字节数组,一个接受字符串,使用更方便
更多推荐
所有评论(0)