当前位置: 首页 > wzjs >正文

邯郸网站设计申请菜鸟教程wordpress模板

邯郸网站设计申请,菜鸟教程wordpress模板,网站开发方倍工作室,iis发布asp网站1、constructor_macros.hpp 这个文件中定义的宏都是和C编译器提供的默认函数相关的,这样做的目的有助于代码简洁,所有类的构造函数都适用。这个是可以复用的,自己的库也可以设计成这样的。代码如下: #ifndef UTILS_CONSTRUCTOR_…

1、constructor_macros.hpp

这个文件中定义的宏都是和C++编译器提供的默认函数相关的,这样做的目的有助于代码简洁,所有类的构造函数都适用。这个是可以复用的,自己的库也可以设计成这样的。代码如下:

#ifndef UTILS_CONSTRUCTOR_MACROS_HPP_
#define UTILS_CONSTRUCTOR_MACROS_HPP_#ifndef FASTDDS_COPY_OPERATIONS
#define FASTDDS_COPY_OPERATIONS(ClassName, access) \ClassName(const ClassName&) = access; \ClassName& operator = (const ClassName&) = access
#endif // !FASTDDS_COPY_OPERATIONS#ifndef FASTDDS_MOVE_OPERATIONS
#define FASTDDS_MOVE_OPERATIONS(ClassName, access) \ClassName(ClassName &&) = access; \ClassName& operator = (ClassName &&) = access
#endif // !FASTDDS_COPY_OPERATIONS#ifndef FASTDDS_DEFAULT_COPY
#define FASTDDS_DEFAULT_COPY(ClassName) FASTDDS_COPY_OPERATIONS(ClassName, default)
#endif // !FASTDDS_DEFAULT_COPY#ifndef FASTDDS_DELETED_COPY
#define FASTDDS_DELETED_COPY(ClassName) FASTDDS_COPY_OPERATIONS(ClassName, delete)
#endif // !FASTDDS_DELETED_COPY#ifndef FASTDDS_DEFAULT_MOVE
#define FASTDDS_DEFAULT_MOVE(ClassName) FASTDDS_MOVE_OPERATIONS(ClassName, default)
#endif // !FASTDDS_DEFAULT_COPY#ifndef FASTDDS_DELETED_MOVE
#define FASTDDS_DELETED_MOVE(ClassName) FASTDDS_MOVE_OPERATIONS(ClassName, delete)
#endif // !FASTDDS_DELETED_COPY

2、DBQueue双缓存队列

这个类是一个双缓存队列,生产者线程将生产的数据放到mForegroundQueue队列,消费者线程从mBackgroundQueue队列取数据。当mBackgroundQueue队列的数据空时,就会交换两个队列。核心代码如下:

//! Clears foreground queue and swaps queues.
// 这个函数一般在前缓冲区队列为空时调用,消费者没有数据可以继续消费了
void Swap()
{std::unique_lock<std::mutex> fgGuard(mForegroundMutex);std::unique_lock<std::mutex> bgGuard(mBackgroundMutex);// Clear the foreground queue.std::queue<T>().swap(*mForegroundQueue);auto* swap       = mBackgroundQueue;mBackgroundQueue = mForegroundQueue;mForegroundQueue = swap;
}//! Pushes to the background queue. Copy constructor.
// 生产者将数据放入后缓冲区队列
void Push(const T& item)
{std::unique_lock<std::mutex> guard(mBackgroundMutex);mBackgroundQueue->push(item);
}//! Pushes to the background queue. Move constructor.
void Push(T&& item)
{std::unique_lock<std::mutex> guard(mBackgroundMutex);mBackgroundQueue->push(std::move(item));
}//! Returns a reference to the front element
//! in the foregrund queue.
// 消费者从前缓冲区队列取数据
T& Front()
{std::unique_lock<std::mutex> guard(mForegroundMutex);return mForegroundQueue->front();
}

3、IPFinder查找IP工具类

其实这个类的主要作用是提供接口,利用系统函数获取机器的ip地址和mac地址,然后再通过一些列的转换,将获取到的数据转化为DDS中存储ip的数据结构中。下面代码可以表示该类的核心作用,返回的数据结构是LocatorList_t*,getIPs函数中会一层一层的调用系统函数。

bool IPFinder::getAllIPAddress(LocatorList_t* locators)
{std::vector<info_IP> ip_names;if (IPFinder::getIPs(&ip_names)){locators->clear();for (auto it = ip_names.begin();it != ip_names.end(); ++it){if (it->type == IP6){locators->push_back(it->locator);}else if (it->type == IP4){locators->push_back(it->locator);}}return true;}return false;
}

4、Host主机类和Semaphore类

Host主机类会获取两个id,一个是mac地址(48个字节),另一个是机器的ip地址(16个字节),FastDDS中是用这两个id唯一标识一台机器的。
Semaphore类是FastDDS自定义的信号量,代码并不难,但是有一个值得学习的点,那就是成员变量中的disable_。disable_ 变量用于控制信号量是否处于禁用状态,其主要作用是在某些情况下避免线程阻塞,比如:

  • 用于确保 Semaphore 在被销毁时不会造成死锁,在析构 Semaphore 之前,可以将 disable_ 设为 true,然后通知所有等待中的线程,以防止它们进入等待状态,导致程序死锁。
  • 避免在不安全的状态下调用 wait(),disable_ 可能会在某些异常情况下被设为 true,这样当 wait() 被调用时,可以直接返回,而不会让线程进入阻塞等待。
    代码如下:
class Semaphore
{
public:explicit Semaphore(size_t count = 0);Semaphore(const Semaphore&) = delete;Semaphore& operator =(const Semaphore&) = delete;void post();void wait();void disable();void enable();void post(int n);private:size_t count_;std::mutex mutex_;std::condition_variable cv_;bool disable_;
};

5、SystemInfo系统信息类

这个类中主要是封装了一些获取系统信息的一些方法。比如获取进程id、主机ip、获取某个环境变量的值、获取当前进程属于哪个用户、文件是否存在、设置环境变量等方法。需要注意的是,在获取环境变量时,一般是先从配置文件中获取,当配置文件中找不到时,从环境变量中获取。该类中还提供这样一个接口,支持注册一些回调函数,这些回掉函数在监听的文件发生变化时调用,也支持取消监听文件的变化。

FileWatchHandle SystemInfo::watch_file(std::string filename,std::function<void()> callback,const fastdds::rtps::ThreadSettings& watch_thread_config,const fastdds::rtps::ThreadSettings& callback_thread_config)
{
#if defined(_WIN32) || defined(__unix__)// 次函数的实现是依赖于第3方库的。return FileWatchHandle (new filewatch::FileWatch<std::string>(filename,[callback](const std::string& /*path*/, const filewatch::Event change_type){switch (change_type){case filewatch::Event::modified:callback();break;default:// No-opbreak;}}, watch_thread_config, callback_thread_config));
#else // defined(_WIN32) || defined(__unix__)static_cast<void>(filename);static_cast<void>(callback);static_cast<void>(watch_thread_config);static_cast<void>(callback_thread_config);return FileWatchHandle();
#endif // defined(_WIN32) || defined(__unix__)
}
void SystemInfo::stop_watching_file(FileWatchHandle& handle)
{
#if defined(_WIN32) || defined(__unix__)handle.reset();
#endif // if defined(_WIN32) || defined(__unix__)static_cast<void>(handle);
}

6、time_t_helpers.hpp和TimeConversion.hpp

后面这个文件定义了一系列的时间转换函数,前面这个文件中主要定义了3个函数,都是用作时间转换,主要针对分数时间和计算unix时间。什么是分数时间、unix时间、utc时间、GPS时间呢?

  • 分数时间(Fractional Time):常用于高精度时间计算,特别是在 FastDDS、RTPS、NTP 等协议中。它将时间表示为秒的整数部分 + 小数部分,其中小数部分通常用 32 位无符号整数存储,表示秒的小数部分。例如,fraction = 0x80000000 对应 0.5 秒。这种表示方式能够提供纳秒级的时间精度。
  • UTC时间(Coordinated Universal Time,协调世界时):UTC 是当前全球使用的标准时间,基于 国际原子时(TAI),但会加入 闰秒 以保持与地球自转(UT1)同步。例如,2024 年 UTC = TAI - 37 秒,而未来如果有新的闰秒调整,这个差值可能会变化。UTC 被广泛应用于全球通信、金融、互联网等领域。
  • Unix时间(Unix Time / Epoch Time):Unix 时间是从 1970 年 1 月 1 日 00:00:00 UTC 开始计算的秒数(不包括闰秒)。例如,2025 年 1 月 1 日 00:00:00 UTC 的 Unix 时间戳是 1735689600。由于 Unix 时间不考虑闰秒,因此它与 UTC 在某些精确应用中可能存在偏差。
  • GPS时间(GPS Time):GPS 时间起始于 1980 年 1 月 6 日 00:00:00 UTC,并且不会受闰秒影响。它的计算方式为 GPS 时间 = TAI - 19 秒(固定值)。相比 UTC,GPS 时间更稳定,非常适用于高精度定位和授时系统。

文章转载自:

http://mjvg70Bg.bLqgc.cn
http://vMgGUZMi.bLqgc.cn
http://8L2G3yex.bLqgc.cn
http://4WD5DhOM.bLqgc.cn
http://PuAS1Zl7.bLqgc.cn
http://y8xN5ZBb.bLqgc.cn
http://eM5sfC6e.bLqgc.cn
http://Ha8Eguvz.bLqgc.cn
http://8JZUGWww.bLqgc.cn
http://8XipsqRt.bLqgc.cn
http://OMXZ6WOv.bLqgc.cn
http://ruNTWMSR.bLqgc.cn
http://enj8Tbpm.bLqgc.cn
http://b6O5hecC.bLqgc.cn
http://GutnXptP.bLqgc.cn
http://MZkZlJu9.bLqgc.cn
http://ZLZ3TyGv.bLqgc.cn
http://buECm8N6.bLqgc.cn
http://ZMKBWteY.bLqgc.cn
http://r4vIUHUa.bLqgc.cn
http://lJhItyxr.bLqgc.cn
http://FLIquNWR.bLqgc.cn
http://ofBJQgh2.bLqgc.cn
http://zsdJId6Y.bLqgc.cn
http://nqJQid5j.bLqgc.cn
http://FoDHa23L.bLqgc.cn
http://MgAsXX0V.bLqgc.cn
http://W34Gzu5v.bLqgc.cn
http://IVdyrL8s.bLqgc.cn
http://kToWnAXb.bLqgc.cn
http://www.dtcms.com/wzjs/754417.html

相关文章:

  • 专业房产网站建设wordpress+move插件
  • 垂直网站做益智类问答开个广告公司大概需要多少钱
  • 青岛网站建设哪个好2017做啥网站能致富
  • 企业网站需求方案阿里云wordpress 安装
  • 杭州专业网站设计制作兰州网络推广优化网
  • 建设银行淮安招聘网站公司建网站软件
  • 花店做网单的网站旅游网页设计模板简约图片
  • 做一个15页的网站怎么做试客类网站开发
  • 静态网站怎么建设厦门做网站优化的公司
  • 南京做企业网站公司青岛一点两区救治医院
  • seo网站制作电商网站开发ppt
  • 网站的发布与推广怎么写网页动画制作软件
  • 江西商城网站建设宁夏建设技术职业学院官方网站
  • 麻将棋牌网站开发集团网站建设网络公司
  • 建设部网站合并如何制作图片配文字
  • 亚马逊网站建设进度计划表大连外经贸网站
  • 网站如何添加浮动窗口可以在线制作网页的网站
  • 网站开发专业就业培训学校学室内设计后悔了
  • 建立一个网站要多久wordpress需要什么主机
  • 微信优惠券网站怎么做wordpress设置权限设置方法
  • 赚钱平台网站自己开公司需要什么条件
  • 在哪个网站上可以找兼职做青岛网站建设费用
  • 长沙建站费用成都关键词优化
  • 网站建设神器重庆建设工程信息网项目经理积分
  • 网站项目建设措施河南移动商城网站建设
  • 城乡建设网站宁德百度经验悬赏令
  • php+mysql网站开发全程实例 下载网站硬件需求
  • 下沙做网站软件wordpress 有必要静态化
  • 商水县建设局网站seo提供服务
  • 网站建设和维护待遇免费微信小程序模板