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

【开源工具】深度解析:基于PyQt6的Windows时间校时同步工具开发全攻略

🕒 【开源工具】深度解析:基于PyQt6的Windows时间校时同步工具开发全攻略

请添加图片描述

🌈 个人主页:创客白泽 - CSDN博客
🔥 系列专栏:🐍《Python开源项目实战》
💡 热爱不止于代码,热情源自每一个灵感闪现的夜晚。愿以开源之火,点亮前行之路。
👍 如果觉得这篇文章有帮助,欢迎您一键三连,分享给更多人哦

请添加图片描述

在这里插入图片描述

一、概述:时间同步的重要性与工具价值

在现代计算机应用中,准确的时间同步至关重要。无论是金融交易、日志记录还是分布式系统协同,毫秒级的时间误差都可能导致严重问题。Windows系统虽然内置了时间同步功能,但存在以下痛点:

  1. 同步频率不可控(默认每周一次)
  2. 服务器选择有限
  3. 缺乏可视化操作界面
  4. 无法实时查看同步状态

本文介绍的Windows智能校时工具通过PyQt6实现了以下突破:

  • 多NTP服务器智能选择
  • 可配置的自动同步周期
  • 直观的图形化界面
  • 实时状态监控
  • 服务器连通性测试

二、功能全景图

2.1 核心功能矩阵

功能模块实现方式技术亮点
时间显示QTimer实时刷新多线程避免UI阻塞
NTP同步ntplib+win32api双保险机制(NTP+HTTP备用)
自动同步QTimer定时触发智能间隔配置(1-1440分钟)
服务器测试多线程并行测试延迟毫秒级统计

2.2 特色功能详解

  1. 智能降级策略:当NTP协议同步失败时,自动切换HTTP API备用方案
  2. 跨线程通信:通过PyQt信号槽机制实现线程安全的状态更新
  3. 系统级集成:调用win32api直接修改系统时间(需管理员权限)

三、效果展示

3.1 主界面布局

在这里插入图片描述

  • 顶部:大字号时间日期显示
  • 中部:NTP服务器配置区
  • 底部:操作按钮与状态栏

3.2 服务器测试对话框

在这里插入图片描述

  • 可视化服务器响应延迟
  • 成功/失败状态直观标识

四、实现步骤详解

4.1 环境准备

pip install pyqt6 ntplib requests pywin32

4.2 核心类结构

在这里插入图片描述

4.3 关键实现步骤

  1. 时间获取双保险机制
def do_sync(self):try:# 首选NTP协议response = self.ntp_client.request(ntp_server, version=3, timeout=5)...except ntplib.NTPException:# 备用HTTP方案ntp_time = self.get_time_from_http()
  1. 线程安全的UI更新
class TimeSyncSignals(QObject):update_status = pyqtSignal(str)  # 状态更新信号sync_complete = pyqtSignal(bool, str, str)  # 完成信号# 子线程通过信号触发主线程UI更新
self.signals.update_status.emit("正在同步...")

五、代码深度解析

5.1 NTP时间转换关键代码

# 获取NTP响应并转换时区
response = self.ntp_client.request(server, version=3, timeout=5)
ntp_time = datetime.datetime.fromtimestamp(response.tx_time)  # 本地时间
utc_time = datetime.datetime.utcfromtimestamp(response.tx_time)  # UTC时间# 设置系统时间(必须使用UTC)
win32api.SetSystemTime(utc_time.year, utc_time.month, utc_time.isoweekday() % 7,utc_time.day, utc_time.hour, utc_time.minute,utc_time.second, int(utc_time.microsecond / 1000)
)

5.2 自定义事件处理

class ServerTestEvent(QEvent):def __init__(self, text):super().__init__(QEvent.Type.User)self.text = text# 在子线程中安全更新UI
def add_result(self, text):QApplication.instance().postEvent(self, ServerTestEvent(text))def customEvent(self, event):if isinstance(event, ServerTestEvent):self.result_list.addItem(event.text)

5.3 样式美化技巧

/* 按钮渐变效果 */
QPushButton {background: qlineargradient(x1:0, y1:0, x2:1, y2:1,stop:0 #4CAF50, stop:1 #45a049);border-radius: 4px;color: white;
}/* 列表项悬停效果 */
QListWidget::item:hover {background: #e0e0e0;
}

六、源码下载与使用说明

6.1 完整源码

import sys
import datetime
import threading
import requests
import ntplib
import win32api
from PyQt6.QtWidgets import (QApplication, QMainWindow, QWidget, QVBoxLayout, QHBoxLayout, QLabel, QComboBox, QPushButton, QSpinBox, QCheckBox, QListWidget, QMessageBox, QGroupBox, QScrollArea, QDialog)
from PyQt6.QtCore import Qt, QTimer, QDateTime, QObject, pyqtSignal, QEvent
from PyQt6.QtGui import QFont, QIconclass TimeSyncSignals(QObject):update_status = pyqtSignal(str)sync_complete = pyqtSignal(bool, str, str)class TimeSyncApp(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("🕒 Windows 自动校时工具")self.setGeometry(100, 100, 650, 500)# 初始化变量self.sync_in_progress = Falseself.auto_sync_timer = QTimer()self.auto_sync_timer.timeout.connect(self.sync_time)self.signals = TimeSyncSignals()# 连接信号槽self.signals.update_status.connect(self.update_status_bar)self.signals.sync_complete.connect(self.handle_sync_result)# 创建主界面self.init_ui()# 启动时间更新定时器self.time_update_timer = QTimer()self.time_update_timer.timeout.connect(self.update_current_time)self.time_update_timer.start(1000)# 初始化NTP客户端self.ntp_client = ntplib.NTPClient()def init_ui(self):# 主窗口布局central_widget = QWidget()self.setCentralWidget(central_widget)main_layout = QVBoxLayout(central_widget)main_layout.setSpacing(15)main_layout.setContentsMargins(20, 20, 20, 20)# 标题title_label = QLabel("🕒 Windows 自动校时工具")title_font = QFont("Segoe UI", 18, QFont.Weight.Bold)title_label.setFont(title_font)title_label.setStyleSheet("color: #4CAF50;")title_label.setAlignment(Qt.AlignmentFlag.AlignCenter)main_layout.addWidget(title_label)# 当前时间显示time_group = QGroupBox("🕰️ 当前系统时间")time_group.setStyleSheet("QGroupBox { font-weight: bold; }")time_layout = QVBoxLayout(time_group)self.current_time_label = QLabel()time_font = QFont("Segoe UI", 24)self.current_time_label.setFont(time_font)self.current_time_label.setStyleSheet("color: #2196F3;")self.current_time_label.setAlignment(Qt.AlignmentFlag.AlignCenter)time_layout.addWidget(self.current_time_label)self.current_date_label = QLabel()date_font = QFont("Segoe UI", 12)self.current_date_label.setFont(date_font)self.current_date_label.setAlignment(Qt.AlignmentFlag.AlignCenter)time_layout.addWidget(self.current_date_label)main_layout.addWidget(time_group)# 同步选项sync_group = QGroupBox("⚙️ 同步选项")sync_group.setStyleSheet("QGroupBox { font-weight: bold; }")sync_layout = QVBoxLayout(sync_group)# NTP服务器选择ntp_layout = QHBoxLayout()ntp_label = QLabel("NTP 服务器:")ntp_label.setFont(QFont("Segoe UI", 10))self.ntp_combo = QComboBox()self.ntp_combo.addItems(["time.windows.com","time.nist.gov","pool.ntp.org","time.google.com","time.apple.com","ntp.aliyun.com","ntp.tencent.com"])self.ntp_combo.setCurrentIndex(0)self.ntp_combo.setFont(QFont("Segoe UI", 10))ntp_layout.addWidget(ntp_label)ntp_layout.addWidget(self.ntp_combo)sync_layout.addLayout(ntp_layout)# 同步间隔interval_layout = QHBoxLayout()interval_label = QLabel("自动同步间隔 (分钟):")interval_label.setFont(QFont("Segoe UI", 10))self.interval_spin = QSpinBox()self.interval_spin.setRange(1, 1440)self.interval_spin.setValue(60)self.interval_spin.setFont(QFont("Segoe UI", 10))interval_layout.addWidget(interval_label)interval_layout.addWidget(self.interval_spin)sync_layout.addLayout(interval_layout)# 自动同步开关self.auto_sync_check = QCheckBox("启用自动同步 🔄")self.auto_sync_check.setFont(QFont("Segoe UI", 10))self.auto_sync_check.stateChanged.connect(self.toggle_auto_sync)sync_layout.addWidget(self.auto_sync_check)main_layout.addWidget(sync_group)# 按钮区域button_layout = QHBoxLayout()self.sync_button = QPushButton("立即同步时间 ⚡")self.sync_button.setFont(QFont("Segoe UI", 10, QFont.Weight.Bold))self.sync_button.setStyleSheet("background-color: #4CAF50; color: white;")self.sync_button.clicked.connect(self.sync_time)button_layout.addWidget(self.sync_button)self.server_test_button = QPushButton("测试服务器 🛠️")self.server_test_button.setFont(QFont("Segoe UI", 10))self.server_test_button.clicked.connect(self.show_server_test_dialog)button_layout.addWidget(self.server_test_button)main_layout.addLayout(button_layout)# 状态栏self.status_bar = self.statusBar()self.status_bar.setFont(QFont("Segoe UI", 9))self.status_bar.showMessage("🟢 就绪")# 初始化当前时间显示self.update_current_time()def update_current_time(self):now = QDateTime.currentDateTime()self.current_time_label.setText(now.toString("HH:mm:ss"))self.current_date_label.setText(now.toString("yyyy-MM-dd dddd"))def toggle_auto_sync(self, state):if state == Qt.CheckState.Checked.value:minutes = self.interval_spin.value()self.auto_sync_timer.start(minutes * 60000)  # 转换为毫秒self.status_bar.showMessage(f"🔄 自动同步已启用,每 {minutes} 分钟同步一次")else:self.auto_sync_timer.stop()self.status_bar.showMessage("⏸️ 自动同步已禁用")def sync_time(self):if self.sync_in_progress:returnself.sync_in_progress = Trueself.sync_button.setEnabled(False)self.signals.update_status.emit("🔄 正在同步时间...")# 在新线程中执行同步操作sync_thread = threading.Thread(target=self.do_sync, daemon=True)sync_thread.start()def do_sync(self):ntp_server = self.ntp_combo.currentText()try:# 使用NTP协议获取时间response = self.ntp_client.request(ntp_server, version=3, timeout=5)# 将NTP时间转换为本地时间ntp_time = datetime.datetime.fromtimestamp(response.tx_time)utc_time = datetime.datetime.utcfromtimestamp(response.tx_time)print(f"从NTP服务器获取的时间 (UTC): {utc_time}")print(f"转换为本地时间: {ntp_time}")# 设置系统时间 (需要UTC时间)win32api.SetSystemTime(utc_time.year, utc_time.month, utc_time.isoweekday() % 7,utc_time.day, utc_time.hour, utc_time.minute, utc_time.second, int(utc_time.microsecond / 1000))# 获取设置后的系统时间new_time = datetime.datetime.now()print(f"设置后的系统时间: {new_time}")# 通过信号发送结果self.signals.sync_complete.emit(True, f"✅ 时间同步成功! 服务器: {ntp_server}",f"时间已成功同步到 {ntp_server}\nNTP时间 (UTC): {utc_time}\n本地时间: {ntp_time}\n设置后系统时间: {new_time}")except ntplib.NTPException as e:# NTP失败,尝试备用方法try:self.signals.update_status.emit("⚠️ NTP同步失败,尝试备用方法...")ntp_time = self.get_time_from_http()if ntp_time:utc_time = ntp_time.astimezone(datetime.timezone.utc).replace(tzinfo=None)print(f"从HTTP获取的时间 (本地): {ntp_time}")print(f"转换为UTC时间: {utc_time}")win32api.SetSystemTime(utc_time.year, utc_time.month, utc_time.isoweekday() % 7,utc_time.day, utc_time.hour, utc_time.minute, utc_time.second, int(utc_time.microsecond / 1000))new_time = datetime.datetime.now()print(f"设置后的系统时间: {new_time}")self.signals.sync_complete.emit(True,"✅ 时间同步成功! (备用方法)",f"时间已通过备用方法同步\nHTTP时间: {ntp_time}\nUTC时间: {utc_time}\n设置后系统时间: {new_time}")else:raise Exception("所有同步方法均失败")except Exception as e:error_msg = f"❌ 同步失败: {str(e)}"print(error_msg)self.signals.sync_complete.emit(False,error_msg,f"时间同步失败:\n{str(e)}")finally:self.sync_in_progress = Falseself.sync_button.setEnabled(True)def get_time_from_http(self):try:# 尝试使用世界时间APIresponse = requests.get("http://worldtimeapi.org/api/timezone/Etc/UTC", timeout=5)data = response.json()utc_time = datetime.datetime.fromisoformat(data["datetime"])return utc_time.astimezone()  # 转换为本地时区except:try:# 尝试使用阿里云APIresponse = requests.get("http://api.m.taobao.com/rest/api3.do?api=mtop.common.getTimestamp", timeout=5)data = response.json()timestamp = int(data["data"]["t"]) / 1000return datetime.datetime.fromtimestamp(timestamp)except:return Nonedef update_status_bar(self, message):self.status_bar.showMessage(message)def handle_sync_result(self, success, status_msg, detail_msg):self.status_bar.showMessage(status_msg)if success:QMessageBox.information(self, "成功", detail_msg)else:QMessageBox.critical(self, "错误", detail_msg)def show_server_test_dialog(self):self.test_dialog = ServerTestDialog(self)self.test_dialog.show()class ServerTestDialog(QDialog):def __init__(self, parent=None):super().__init__(parent)self.setWindowTitle("🛠️ NTP服务器测试工具")self.setWindowModality(Qt.WindowModality.NonModal)self.setMinimumSize(600, 400)self.ntp_client = ntplib.NTPClient()self.test_in_progress = Falseself.init_ui()def init_ui(self):layout = QVBoxLayout(self)layout.setContentsMargins(15, 15, 15, 15)layout.setSpacing(10)# 标题title_label = QLabel("NTP服务器连通性测试")title_label.setFont(QFont("Segoe UI", 14, QFont.Weight.Bold))title_label.setAlignment(Qt.AlignmentFlag.AlignCenter)layout.addWidget(title_label)# 说明info_label = QLabel("测试各NTP服务器的响应时间和可用性,结果将显示在下方列表中:")info_label.setFont(QFont("Segoe UI", 10))info_label.setWordWrap(True)layout.addWidget(info_label)# 结果列表self.result_list = QListWidget()self.result_list.setFont(QFont("Consolas", 9))self.result_list.setStyleSheet("""QListWidget {background-color: #f8f8f8;border: 1px solid #ddd;border-radius: 4px;}""")scroll_area = QScrollArea()scroll_area.setWidgetResizable(True)scroll_area.setWidget(self.result_list)layout.addWidget(scroll_area, 1)# 进度标签self.progress_label = QLabel("准备开始测试...")self.progress_label.setFont(QFont("Segoe UI", 9))self.progress_label.setAlignment(Qt.AlignmentFlag.AlignCenter)layout.addWidget(self.progress_label)# 按钮区域button_layout = QHBoxLayout()button_layout.setSpacing(15)self.test_button = QPushButton("开始测试")self.test_button.setFont(QFont("Segoe UI", 10))self.test_button.setStyleSheet("""QPushButton {background-color: #4CAF50;color: white;padding: 5px 15px;border: none;border-radius: 4px;}QPushButton:disabled {background-color: #cccccc;}""")self.test_button.clicked.connect(self.start_test)close_button = QPushButton("关闭")close_button.setFont(QFont("Segoe UI", 10))close_button.setStyleSheet("""QPushButton {background-color: #f44336;color: white;padding: 5px 15px;border: none;border-radius: 4px;}""")close_button.clicked.connect(self.close)button_layout.addStretch(1)button_layout.addWidget(self.test_button)button_layout.addWidget(close_button)button_layout.addStretch(1)layout.addLayout(button_layout)def start_test(self):if self.test_in_progress:returnself.test_in_progress = Trueself.test_button.setEnabled(False)self.result_list.clear()self.progress_label.setText("测试进行中...")servers = ["time.windows.com","time.nist.gov","pool.ntp.org","time.google.com","time.apple.com","ntp.aliyun.com","ntp.tencent.com"]print("\n" + "="*50)print("Starting NTP server connectivity test...")print("="*50)test_thread = threading.Thread(target=self.run_server_tests, args=(servers,), daemon=True)test_thread.start()def run_server_tests(self, servers):for server in servers:self.add_result(f"正在测试 {server}...")print(f"\nTesting server: {server}")try:start_time = datetime.datetime.now()response = self.ntp_client.request(server, version=3, timeout=5)end_time = datetime.datetime.now()latency = (end_time - start_time).total_seconds() * 1000  # 毫秒ntp_time = datetime.datetime.fromtimestamp(response.tx_time)result_text = (f"✅ {server} - 延迟: {latency:.2f}ms - "f"时间: {ntp_time.strftime('%Y-%m-%d %H:%M:%S')}")print(f"Server {server} test successful")print(f"  Latency: {latency:.2f}ms")print(f"  NTP Time: {ntp_time}")self.add_result(result_text)except ntplib.NTPException as e:error_text = f"❌ {server} - NTP错误: {str(e)}"print(f"Server {server} test failed (NTP error): {str(e)}")self.add_result(error_text)except Exception as e:error_text = f"❌ {server} - 错误: {str(e)}"print(f"Server {server} test failed (General error): {str(e)}")self.add_result(error_text)print("\n" + "="*50)print("NTP server testing completed")print("="*50 + "\n")self.test_complete()def add_result(self, text):# 使用QMetaObject.invokeMethod确保线程安全QApplication.instance().postEvent(self, ServerTestEvent(text))def test_complete(self):QApplication.instance().postEvent(self, ServerTestCompleteEvent())def customEvent(self, event):if isinstance(event, ServerTestEvent):self.result_list.addItem(event.text)self.result_list.scrollToBottom()elif isinstance(event, ServerTestCompleteEvent):self.test_in_progress = Falseself.test_button.setEnabled(True)self.progress_label.setText("测试完成")print("All server tests completed")class ServerTestEvent(QEvent):def __init__(self, text):super().__init__(QEvent.Type.User)self.text = textclass ServerTestCompleteEvent(QEvent):def __init__(self):super().__init__(QEvent.Type.User + 1)if __name__ == "__main__":app = QApplication(sys.argv)# 设置应用程序样式app.setStyle("Fusion")# 设置全局字体font = QFont("Segoe UI", 10)app.setFont(font)window = TimeSyncApp()window.show()sys.exit(app.exec())

6.2 运行要求

  • Windows 7及以上系统
  • Python 3.8+
  • 管理员权限(修改系统时间需要)

6.3 编译为EXE

pyinstaller --onefile --windowed --icon=time.ico timesync.py

七、总结与拓展方向

7.1 项目亮点

  1. 采用PyQt6现代GUI框架,界面美观
  2. 双时间源冗余设计,可靠性高
  3. 完整的异常处理机制
  4. 符合Windows系统规范的时间设置

7.2 优化建议

  1. 增加本地时间服务器配置
  2. 实现时间偏差历史记录
  3. 添加UTC/GMT时区切换
  4. 支持Linux/MacOS跨平台

时间同步看似简单,实则涉及操作系统底层、网络协议、多线程编程等多个技术领域。本项目的价值不仅在于实用工具开发,更是PyQt6高级应用的典型案例。建议读者在此基础上深入探索Windows系统API和NTP协议的高级用法。

相关文章:

【开源工具】深度解析:基于PyQt6的Windows时间校时同步工具开发全攻略

🕒 【开源工具】深度解析:基于PyQt6的Windows时间校时同步工具开发全攻略 🌈 个人主页:创客白泽 - CSDN博客 🔥 系列专栏:🐍《Python开源项目实战》 💡 热爱不止于代码,热…...

开源 RPA 工具深度解析与官网指引

开源 RPA 工具深度解析与官网指引 摘要 :本文深入解析了多款开源 RPA 工具,涵盖 TagUI、Aibote、Taskt 等,分别介绍了它们的核心功能,并提供了各工具的官网链接,方便读者进一步了解与使用,同时给出了基于不…...

【免杀】C2免杀技术(一)VS设置

一、概述 编译器生成的二进制文件特征(代码结构、元数据、指纹)可能被杀软的静态或动态检测规则匹配。Visual Studio 的构建设置(特别是运行库、编译器优化、链接方式等)会直接影响最终生成的二进制文件的结构、行为特征和依赖关…...

OpenHarmony 开源鸿蒙南向开发——linux下使用make交叉编译第三方库——nettle库

准备工作 请依照这篇文章搭建环境 OpenHarmony 开源鸿蒙南向开发——linux下使用make交叉编译第三方库——环境配置_openharmony交叉编译-CSDN博客 编译依赖 相关依赖有 gmp-6.3.0 请依照这篇文章编译 OpenHarmony 开源鸿蒙南向开发——linux下使用make交叉编译第三方库…...

Kotlin与Ktor构建Android后端API

以下是一个使用 Kotlin 和 Ktor 构建 Android 后端 API 的详细示例,包含常见功能实现: 1. 项目搭建 (build.gradle.kts) plugins {applicationkotlin("jvm") version "1.9.0"id("io.ktor.plugin") version "2.3.4"id("org.je…...

网页jupyter如何显示jpipvenv虚拟环境

今天使用社区版pycharm编辑.ipynb文件时,发现pycharm编辑.ipynb文件需要订阅。但是发现pipvenv虚拟环境解释器在jupyter中只有一个Python3:ipykernel版本,没有venv和conda的虚拟环境。因此在网上搜寻资料,作为备份记录。 以windows为例 假设目…...

学习黑客5 分钟深入浅出理解Windows System Configuration

5 分钟深入浅出理解Windows System Configuration ⚙️ 大家好!今天我们将探索Windows系统配置——这是Windows操作系统的核心控制中心,决定了系统如何启动、运行和管理各种功能。无论你是计算机初学者,还是在TryHackMe等平台上学习网络安全…...

Spyglass:跨时钟域同步方案

相关阅读 Spyglasshttps://blog.csdn.net/weixin_45791458/category_12828934.html?spm1001.2014.3001.5482 Spyglass可以用于检测设计中的跨时钟域相关问题,确保电路中添加了适当的同步机制,以避免此类问题的发生,例如: 与亚稳…...

Ubuntu虚拟机文件系统扩容

1. 删除所有的虚拟机快照。 2. 选择扩展 将最大大小调整为你所需的大小 3. 进入虚拟机,输入命令: sudo apt install gparted sudo gparted 4. 选择磁盘,右键根分区,选择Resize/Move,调整大小。 5. 调整所需分区大…...

Window、CentOs、Ubuntu 安装 docker

Window 版本 网址:https://www.docker.com/ 下载 下载完成后,双击安装就可以了 Centos 版本 卸载 Docker (可选) yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-log…...

mac M2下虚拟机CentOS 8 安装上安装 Berkeley DB

问题:直接在centos8 yum安装db4-devel失败,只能手工安装 进入home目录,下载 wget http://download.oracle.com/berkeley-db/db-4.6.21.tar.gz 解压 tar -zxvf db-4.6.21.tar.gz 切到cd db-4.6.21的build_unix下 cd db-4.6.21 cd build_…...

Python文字转语音TTS库示例(edge-tts)

1. 安装 pip install edge-tts2. 命令行使用 # 生成语音文件 # -f:要转换语音的文本文件,例如一个txt文件 # --text:指明要保存的mp3的文本 # --write-media:指明保存的mp3文件路径 # --write-subtitles:指定输出字幕…...

lua入门语法,包含安装,注释,变量,循环等

文章目录 LUA入门什么是lualua安装入门lua的使用方式注释定义变量lua中的数据类型流程控制ifelsewhile语法:for 函数表模块 LUA入门 什么是lua 一种脚本语言,设计的目的是为了能够在一些应用程序提供灵活的扩展功能和定制功能。 lua安装 有linux版本…...

【文心智能体】使用文心一言来给智能体设计一段稳定调用工作流的提示词

🌹欢迎来到《小5讲堂》🌹 🌹这是《文心智能体》系列文章,每篇文章将以博主理解的角度展开讲解。🌹 🌹温馨提示:博主能力有限,理解水平有限,若有不对之处望指正&#xff0…...

TWASandGWAS中GBS filtering and GWAS(1)

F:\文章代码\TWASandGWAS\GBS filtering and GWAS README.TXT 请检查幻灯片“Vitamaize_update_Gorelab_Ames_GBS_filtering_20191122.pptx”中关于阿姆斯(Ames)ID处理流程的详细信息。 文件夹“Ames_ID_processing”包含了用于处理阿姆斯ID的文件和R…...

Linux电源管理(五),发热管理(thermal),温度控制

更多linux系统电源管理相关的内容请看:Linux电源管理、功耗管理 和 发热管理 (CPUFreq、CPUIdle、RPM、thermal、睡眠 和 唤醒)-CSDN博客 本文主要基于linux-5.4.18版本的内核代码进行分析。 1 简介 1.1 硬件知识 CPU等芯片在工作时会产生大量热量,…...

【C++11】异常

前言 上文我们学习到了C11中类的新功能【C11】类的新功能-CSDN博客 本文我们来学习C下一个新语法:异常 1.异常的概念 异常的处理机制允许程序在运行时就出现的问题进行相应的处理。异常可以使得我们将问题的发现和问题的解决分开,程序的一部分负…...

C#WPF里不能出现滚动条的原因

使用下面这段代码,就不能出现滚动条: <mdix:DrawerHost.LeftDrawerContent><Grid Width="260" Background="{StaticResource MaterialDesign.Brush.Primary}"><Grid.RowDefinitions><RowDefinition Height="auto"/>&l…...

安装Hadoop并运行WordCount程序

一、安装 Java Hadoop 依赖 Java&#xff0c;首先需要安装 Java 开发工具包&#xff08;JDK&#xff09;。以 Ubuntu 为例&#xff1a; bash sudo apt update sudo apt install openjdk-8-jdk安装后&#xff0c;设置环境变量&#xff1a; bash echo export JAVA_HOME/usr/li…...

从零搭建AI工作站:Gemma3大模型本地部署+WebUI配置全套方案

文章目录 前言1. 安装Ollama2.Gemma3模型安装与运行3. 安装Open WebUI图形化界面3.1 Open WebUI安装运行3.2 添加模型3.3 多模态测试 4. 安装内网穿透工具5. 配置固定公网地址总结 前言 如今各家的AI大模型厮杀得如火如荼&#xff0c;每天都有新的突破。今天我要给大家安利一款…...

《数字人技术实现路径深度剖析与研究报告》

《数字人技术实现路径深度剖析与研究报告》 一、引言 1.1 研究背景与意义 近年来,随着人工智能、虚拟现实、计算机图形学等技术的飞速发展,数字人技术应运而生并取得了显著进展。数字人作为一种新兴的技术应用,正逐步渗透到各个领域,成为推动行业创新发展的重要力量。从最…...

《棒球百科》MLB棒球公益课·棒球1号位

MLB&#xff08;美国职业棒球大联盟&#xff09;的棒球公益课通过推广棒球运动、普及体育教育&#xff0c;对全球多个地区产生了多层次的影响&#xff1a; 1. 体育文化推广 非传统棒球地区的普及&#xff1a;在棒球基础较弱的地区&#xff08;如中国、欧洲部分国家&#xff09…...

Android 中 Handler (创建时)内存泄漏问题及解决方案

一、Handler 内存泄漏核心原理 真题 1&#xff1a;分析 Handler 内存泄漏场景 题目描述&#xff1a; 在 Activity 中使用非静态内部类 Handler 发送延迟消息&#xff0c;旋转屏幕后 Activity 无法释放&#xff0c;分析原因并给出解决方案。 内存泄漏链路分析&#xff1a; 引…...

linux-驱动开发之设备树详解(RK平台为例)

前言 Linux3.x以后的版本才引入了设备树&#xff0c;设备树用于描述一个硬件平台的板级细节。 在早些的linux内核&#xff0c;这些“硬件平台的板级细节”保存在linux内核目录“/arch”&#xff0c; 以ARM为例“硬件平台的板级细节”保存在“/arch/arm/plat-xxx”和“/arch/ar…...

【现代深度学习技术】注意力机制05:多头注意力

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈PyTorch深度学习 ⌋ ⌋ ⌋ 深度学习 (DL, Deep Learning) 特指基于深层神经网络模型和方法的机器学习。它是在统计机器学习、人工神经网络等算法模型基础上&#xff0c;结合当代大数据和大算力的发展而发展出来的。深度学习最重…...

RDD的五大特征

1. 由多个分区&#xff08;Partitions&#xff09;组成 特性&#xff1a;RDD 是分区的集合&#xff0c;每个分区在集群的不同节点上存储。分区是数据并行处理的基本单位。作用&#xff1a;分区使 RDD 能够在集群中并行计算&#xff0c;提高处理效率。 2. 有一个计算每个分区的…...

键盘RGB矩阵与LED指示灯(理论部分)

键盘RGB矩阵与LED指示灯(理论部分) 一、LED指示灯基础 在键盘世界里,LED指示灯不仅仅是装饰,它们还能提供丰富的状态信息。QMK固件提供了读取HID规范中定义的5种LED状态的方法: Num Lock(数字锁定)Caps Lock(大写锁定)Scroll Lock(滚动锁定)Compose(组合键)Desp…...

HTTP方法和状态码(Status Code)

HTTP方法 HTTP方法&#xff08;也称HTTP动词&#xff09;主要用于定义对资源的操作类型。根据HTTP/1.1规范&#xff08;RFC 7231&#xff09;以及后续扩展&#xff0c;常用的HTTP方法有以下几种&#xff1a; GET&#xff1a;请求获取指定资源的表示形式。POST&#xff1a;向指…...

【sqlmap需要掌握的参数】

sqlmap需要掌握的参数 目标-u 指定URL 用于get请求-l 用于post请求- r 用于post请求指定数据库/表/字段 -D/-T/-C 脱库获得数据库获取用户获取表获取列获取字段获取字段类型获取值 其他 目标 -u 指定URL 用于get请求 -u URL, --urlURL 目标URL 只使用于get命令中 -l 用于pos…...

用 AltSnap 解锁 Windows 窗口管理的“魔法”

你有没有遇到过这样的场景&#xff1a;电脑屏幕上堆满了窗口&#xff0c;想快速调整它们的大小和位置&#xff0c;却只能拖来拖去&#xff0c;费时又费力&#xff1f;或者你是个多任务狂魔&#xff0c;喜欢一边写代码、一边看文档、一边刷视频&#xff0c;却发现 Windows 自带的…...

高并发内存池(三):TLS无锁访问以及Central Cache结构设计

目录 前言&#xff1a; 一&#xff0c;thread cache线程局部存储的实现 问题引入 概念说明 基本使用 thread cache TLS的实现 二&#xff0c;Central Cache整体的结构框架 大致结构 span结构 span结构的实现 三&#xff0c;Central Cache大致结构的实现 单例模式 thr…...

数据治理域——数据治理体系建设

摘要 本文主要介绍了数据治理系统的建设。数据治理对企业至关重要&#xff0c;其动因包括应对数据爆炸增长、提升内部管理效率、支撑复杂业务需求、加强风险防控与合规管理以及实现数字化转型战略。其核心目的是提升数据质量、统一数据标准、优化数据资产管理、支撑业务发展和…...

数据库实验报告 SQL SERVER 2008的基本操作 1

实验报告&#xff08;第 1 次&#xff09; 实验名称 SQL SERVER 2008的基本操作 实验时间 9月14日1-2节 一、实验内容 数据库的基本操作:包括创建、修改、附加、分离和删除数据库等。 二、源程序及主要算法说明 本次实验不涉及程序和算法。 三、测…...

基于STM32、HAL库的ICP-20100气压传感器 驱动程序设计

一、简介: ICP-20100 是 InvenSense(TDK 集团旗下公司)生产的一款高精度数字气压传感器,专为需要精确测量气压和海拔高度的应用场景设计。它具有低功耗、高精度、快速响应等特点,非常适合物联网、可穿戴设备和无人机等应用。 二、硬件接口: ICP-20100 引脚STM32L4XX 引脚…...

提示工程实战指南:Google白皮书关键内容一文讲清

You don’t need to be a data scientist or a machine learning engineer – everyone can writea prompt. 一、概述 Google于2025年2月发布的《Prompt Engineering》白皮书系统阐述了提示工程的核心技术、实践方法及挑战应对策略。该文档由Lee Boonstra主编&#xff0c;多位…...

国产大模型「五强争霸」:决战AGI,谁主沉浮?

引言 中国AI大模型市场正经历一场史无前例的洗牌&#xff01;曾经“百模混战”的局面已落幕&#xff0c;字节、阿里、阶跃星辰、智谱和DeepSeek五大巨头强势崛起&#xff0c;形成“基模五强”新格局。这场竞争不仅是技术实力的较量&#xff0c;更是资源、人才与生态的全面博弈。…...

Linux进程10-有名管道概述、创建、读写操作、两个管道进程间通信、读写规律(只读、只写、读写区别)、设置阻塞/非阻塞

目录 1.有名管道 1.1概述 1.2与无名管道的差异 2.有名管道的创建 2.1 直接用shell命令创建有名管道 2.2使用mkfifo函数创建有名管道 3.有名管道读写操作 3.1单次读写 3.2多次读写 4.有名管道进程间通信 4.1回合制通信 4.2父子进程通信 5.有名管道读写规律&#xff…...

高吞吐与低延迟的博弈:Kafka与RabbitMQ数据管道实战指南

摘要 本文全面对比Apache Kafka与RabbitMQ在数据管道中的设计哲学、核心差异及协同方案。结合性能指标、应用场景和企业级实战案例&#xff0c;揭示Kafka在高吞吐流式处理中的优势与RabbitMQ在复杂路由和低延迟传输方面的独特特点&#xff1b;介绍了使用Java生态成熟第三方库&…...

C++23 views::slide (P2442R1) 深入解析

文章目录 引言C20 Ranges库回顾什么是Rangesstd::views的作用 views::slide 概述基本概念原型定义辅助概念工作原理代码示例输出结果 views::slide 的应用场景计算移动平均值查找连续的子序列 总结 引言 在C的发展历程中&#xff0c;每一个新版本都会带来一系列令人期待的新特…...

SpringDataRedis的入门案例,以及RedisTemplate序列化实现

目录 SpringDataRedis 简单介绍 入门案例 RedisTemplate序列化方案 方案一: 方案二: SpringDataRedis 简单介绍 提供了对不同Redis客户端的整合(Lettuce和Jedis) 提供了RedisTemplate统一API来操作Redis 支持Redis的发布订阅模型 支持Redis哨兵和Redis集群 支持基于…...

鸿蒙HarmonyOS list优化一: list 结合 lazyforeach用法

list列表是开发中不可获取的&#xff0c;非常常用的组件&#xff0c;使用过程中会需要不断的优化&#xff0c;接下来我会用几篇文章进行list在纯原生的纯血鸿蒙的不断优化。我想进大厂&#xff0c;希望某位大厂的看到后能给次机会。 首先了解一下lazyforeach&#xff1a; Laz…...

【Jenkins简单自动化部署案例:基于Docker和Harbor的自动化部署流程记录】

摘要 本文记录了作者使用Jenkins时搭建的一个简单自动化部署案例&#xff0c;涵盖Jenkins的Docker化安装、Harbor私有仓库配置、Ansible远程部署等核心步骤。通过一个SpringBoot项目 (RuoYi) 的完整流程演示&#xff0c;从代码提交到镜像构建、推送、滚动更新&#xff0c;逐步实…...

【愚公系列】《Manus极简入门》034-跨文化交流顾问:“文化桥梁使者”

&#x1f31f;【技术大咖愚公搬代码&#xff1a;全栈专家的成长之路&#xff0c;你关注的宝藏博主在这里&#xff01;】&#x1f31f; &#x1f4e3;开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主&#xff01; &#x1f…...

数字滤波器应用介绍

此示例说明如何设计、分析数字过滤器并将其应用于数据。它将帮助您回答以下问题: 如何补偿滤波器引入的延迟?如何避免使信号失真?如何从信号中删除不需要的内容?如何微分信号?以及积分信号文章目录 补偿筛选引入的延迟补偿恒定滤波器延迟 如FIR引起的消除方法,末尾添零补…...

木马查杀篇—Opcode提取

【前言】 介绍Opcode的提取方法&#xff0c;并探讨多种机器学习算法在Webshell检测中的应用&#xff0c;理解如何在实际项目中应用Opcode进行高效的Webshell检测。 Ⅰ 基本概念 Opcode&#xff1a;计算机指令的一部分&#xff0c;也叫字节码&#xff0c;一个php文件可以抽取出…...

栈和队列复习(C语言版)

目录 一.栈的概念 二.栈的实现 三.队列的概念 四.队列的实现 五.循环队列的实现 一.栈的概念 可以将栈抽象地理解成羽毛球桶&#xff0c;或者理解成坐直升电梯&#xff1b;最后一个进去的&#xff0c;出来时第一个出来&#xff0c;并且只有一个出入口。这边需要注意的是&am…...

SDK does not contain ‘libarclite‘ at the path

Xcode16以上版本更新SDK之后就报错了。是因为缺少libarclite_iphoneos.a文件。所以需要在网上找一下该文件根据路径添加进去&#xff0c;arc文件可能需要新建一下。 clang: error: SDK does not contain ‘libarclite’ at the path ‘/Applications/Xcode.app/Contents/Develo…...

Kotlin跨平台Compose Multiplatform实战指南

Kotlin Multiplatform&#xff08;KMP&#xff09;结合 Compose Multiplatform 正在成为跨平台开发的热门选择&#xff0c;它允许开发者用一套代码构建 Android、iOS、桌面&#xff08;Windows/macOS/Linux&#xff09;和 Web 应用。以下是一个实战指南&#xff0c;涵盖核心概念…...

Oracle数据库全局性HANG的处理过程

如果Oracle数据库全局性HANG&#xff0c;首先要做的就是收集数据库HANG时的状态&#xff0c;只有收集到了相应状态&#xff0c;抓住故障现场&#xff0c;才可以进一步分析故障产生的可能原因。 出现此故障&#xff0c;一般情况下可以如此处理&#xff1a; 如果数据库是单节点&a…...

MySQL 8.0 OCP(1Z0-908)英文题库(21-30)

目录 第21题题目分析正确答案 第22题题目分析正确答案 第23题题目分析正确答案 第24题题目分析正确答案 第25题题目分析正确答案 第26题题目分析正确答案 第27题题目分析正确答案 第28题题目分析正确答案 第29题题目分析正确答案 第30题题目解析正确答案 第21题 Choose three.…...