全景AR增强监视系统对接SkeyeIVMS视频云管控系统实现软硬件资源的健康状态管理(三)

您所在的位置:网站首页 rightjustified函数 全景AR增强监视系统对接SkeyeIVMS视频云管控系统实现软硬件资源的健康状态管理(三)

全景AR增强监视系统对接SkeyeIVMS视频云管控系统实现软硬件资源的健康状态管理(三)

2023-03-21 12:41| 来源: 网络整理| 查看: 265

1、写在前面

前篇我们已经实现了一个 Monitor 所需要大部分的内容。

然而,硬件资源的监控相对来说比较麻烦。

不过,我们可以借助 Qt,实际上它也提供了不少相关的 Api。

2、正文开始

现在我们需要监控机器的硬件资源。

所谓硬件资源,主要分为三种:

1、获取磁盘使用:

Qt 中获取磁盘信息的类为 QStorageInfo。

QStorageInfo 允许检索有关卷空间的信息,其装入点,标签和文件系统名称。 您可以通过将卷的挂载点作为构造函数参数传递给函数的挂载点来创建 QStorageInfo 的实例,或者您可以使用 setPath() 方法设置它。 静态挂载 volumes() 方法可用于获取所有已安装文件系统的列表。 QStorageInfo 始终高速缓存检索到的信息,但可以调用 refresh() 来使缓存无效。 复制代码

现在我们使用他实现一个获取磁盘用量的通用接口:

QVariantList MonitorApi::getDrives() { QVariantList drives; for (const QStorageInfo &storage: QStorageInfo::mountedVolumes()) { if (storage.isValid() && storage.isReady()) { if (!storage.isReadOnly()) { QVariantMap drive; uint driveType; QString driveName = storage.name(); #ifdef Q_OS_WIN driveType = GetDriveType(LPCWSTR(storage.rootPath().utf16())); switch (driveType) { case 2: driveName = storage.name().isEmpty() ? QStringLiteral("U盘") : storage.name(); break; case 3: driveName = storage.name().isEmpty() ? QStringLiteral("本地磁盘") : storage.name(); break; case 4: driveName = storage.name().isEmpty() ? QStringLiteral("网络磁盘") : storage.name(); break; case 5: driveName = storage.name().isEmpty() ? QStringLiteral("CD-ROM 驱动器") : storage.name(); break; case 6: driveName = storage.name().isEmpty() ? QStringLiteral("RAM磁盘") : storage.name(); break; default: driveName = storage.name().isEmpty() ? QStringLiteral("磁盘") : storage.name(); break; } #endif drive["drivePath"] = storage.rootPath(); drive["driveName"] = driveName; drive["usedSize"] = storage.bytesTotal() - storage.bytesFree(); drive["totalSize"] = storage.bytesTotal(); drives.append(drive); } } } return drives; } 复制代码

当然,Windows 平台的磁盘名稍有不同。

2、获取 CPU 利用率:

qreal MonitorApi::getCpuUsageRate() { qreal usageRate = 0.0; #ifdef Q_OS_WIN static FILETIME preidleTime; static FILETIME prekernelTime; static FILETIME preuserTime; FILETIME idleTime; FILETIME kernelTime; FILETIME userTime; GetSystemTimes(&idleTime, &kernelTime, &userTime); quint64 a, b; quint64 idle, kernel, user; a = (quint64(preidleTime.dwHighDateTime) PhysicalAddress[i], 16).rightJustified(2, '0'); } if (!addressSet.contains(addr)) { addressSet.insert(addr); recvTotal += ifRow->InOctets; sendTotal += ifRow->OutOctets; //qDebug()


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3