工作者模块管理 Game Macro 系统的后台任务、异步操作和专用工作线程。
| English Version | 中文版本 |
工作者模块提供:
工作者系统设计用于专门的背景操作:
主工作者管理和协调系统。
管理不同任务的专用工作者线程。
Worker := {
Id: 1,
Name: "PixelDetectionWorker",
Type: "Background",
Priority: "Normal",
IntervalMs: 50,
IsRunning: false,
LastRunTime: 0,
ErrorCount: 0,
ResourceUsage: {
CPU: 5.2,
Memory: 15.3
},
Dependencies: ["PixelEngine"]
}
管理长时间运行的后台任务。
BackgroundTask := {
Id: 1,
Name: "ProfileAutoSave",
Type: "Periodic",
IntervalMs: 30000,
IsEnabled: true,
LastExecution: 0,
ExecutionCount: 0,
Function: "AutoSaveProfiles",
Parameters: {}
}
管理带有回调的异步操作。
AsyncOperation := {
Id: 1,
Name: "ImageProcessing",
Type: "Async",
Status: "Pending",
StartTime: 0,
EndTime: 0,
Result: {},
Callback: "ProcessImageComplete",
ErrorHandler: "ProcessImageError"
}
初始化工作者系统。
参数:无
返回:布尔值指示成功
启动所有启用的工作者。
参数:无
返回:布尔值指示成功
停止所有工作者。
参数:无
返回:布尔值指示成功
暂停所有工作者。
参数:无
返回:布尔值指示成功
恢复所有工作者。
参数:无
返回:布尔值指示成功
创建新工作者。
参数:
workerConfig(映射):工作者配置返回:工作者 ID
启动特定工作者。
参数:
workerId(整数):工作者标识符返回:布尔值指示成功
停止特定工作者。
参数:
workerId(整数):工作者标识符返回:布尔值指示成功
获取特定工作者的状态。
参数:
workerId(整数):工作者标识符返回:工作者状态映射
添加新的后台任务。
参数:
taskConfig(映射):任务配置返回:任务 ID
移除后台任务。
参数:
taskId(整数):任务标识符返回:布尔值指示成功
立即执行后台任务。
参数:
taskId(整数):任务标识符返回:布尔值指示成功
创建新的异步操作。
参数:
opConfig(映射):操作配置返回:操作 ID
启动异步操作。
参数:
opId(整数):操作标识符返回:布尔值指示成功
获取异步操作的状态。
参数:
opId(整数):操作标识符返回:操作状态映射
; 创建像素检测工作者
pixelWorker := {
Id: 1,
Name: "PixelDetectionWorker",
Type: "Background",
Priority: "High",
IntervalMs: 50,
Dependencies: ["PixelEngine"]
}
workerId := Workers_CreateWorker(pixelWorker)
; 启动工作者
if (Workers_StartWorker(workerId)) {
Logger_Info("Workers", "像素检测工作者已启动", Map("workerId", workerId))
}
; 创建自动保存后台任务
autoSaveTask := {
Id: 1,
Name: "ProfileAutoSave",
Type: "Periodic",
IntervalMs: 30000, ; 30 秒
IsEnabled: true,
Function: "AutoSaveProfiles",
Parameters: {}
}
taskId := Workers_AddBackgroundTask(autoSaveTask)
; 自动保存函数
AutoSaveProfiles() {
if (App["ProfileData"]["IsModified"]) {
Storage_SaveProfile(App["CurrentProfile"])
Logger_Info("Workers", "配置文件已自动保存")
}
}
; 创建异步图像处理操作
imageOp := {
Id: 1,
Name: "ImageProcessing",
Type: "Async",
Callback: "ProcessImageComplete",
ErrorHandler: "ProcessImageError"
}
opId := Workers_CreateAsyncOperation(imageOp)
; 启动操作
Workers_StartAsyncOperation(opId)
; 回调函数
ProcessImageComplete(result) {
Logger_Info("Workers", "图像处理已完成", result)
UI_UpdateImage(result["ProcessedImage"])
}
ProcessImageError(error) {
Logger_Error("Workers", "图像处理失败", error)
UI_ShowError("图像处理错误")
}
; 带资源监控的工作者
resourceWorker := {
Id: 2,
Name: "ResourceMonitor",
Type: "Monitoring",
Priority: "Low",
IntervalMs: 1000,
Dependencies: []
}
resourceId := Workers_CreateWorker(resourceWorker)
; 带资源监控的工作者函数
Workers_RegisterWorkerFunction(resourceId, Func("MonitorResources"))
MonitorResources() {
; 监控系统资源
cpuUsage := GetCPUUsage()
memoryUsage := GetMemoryUsage()
; 记录资源使用情况
Logger_Debug("Workers", "资源使用情况", Map(
"CPU", cpuUsage,
"Memory", memoryUsage
))
; 根据资源使用情况调整工作者优先级
if (cpuUsage > 80) {
Workers_AdjustPriorities("Low")
}
}
; 带错误处理的工作者
errorWorker := {
Id: 3,
Name: "ErrorHandlingWorker",
Type: "ErrorRecovery",
Priority: "Normal",
IntervalMs: 5000,
Dependencies: []
}
errorId := Workers_CreateWorker(errorWorker)
; 错误处理函数
Workers_RegisterWorkerFunction(errorId, Func("HandleWorkerErrors"))
HandleWorkerErrors() {
; 检查工作者错误
errorWorkers := Workers_GetErrorWorkers()
for worker in errorWorkers {
Logger_Warning("Workers", "检测到工作者错误", Map(
"workerId", worker["Id"],
"errorCount", worker["ErrorCount"]
))
; 尝试恢复
if (worker["ErrorCount"] < 3) {
Workers_RestartWorker(worker["Id"])
} else {
; 错误过多,禁用工作者
Workers_StopWorker(worker["Id"])
Logger_Error("Workers", "工作者因错误被禁用", Map("workerId", worker["Id"]))
}
}
}
工作者设置存储在主配置中:
App["WorkerConfig"] := {
MaxWorkers: 5,
DefaultInterval: 100,
ResourceMonitoring: true,
AutoRecovery: true,
MaxErrorCount: 3
}
工作者配置可以是配置文件特定的:
profile["Workers"] := [
{
Name: "PixelDetection",
Interval: 50,
Priority: "High",
Enabled: true
},
{
Name: "ResourceMonitor",
Interval: 1000,
Priority: "Low",
Enabled: true
}
]
工作者模块包含全面的错误处理:
模块提供用于实时监控的调试接口:
; 启用工作者调试
Workers_EnableDebug()
; 获取调试信息
debugInfo := Workers_GetDebugInfo()
所有工作者活动都被记录用于故障排除: