c++ - 如何解决由于 Outlook 加载项中的后台线程而导致的挂起问题
问题描述
我正在为 Outlook 编写加载项(插件)。我的插件中需要一个线程来在 Outlook 的整个生命周期内保持运行,以处理各种事件并异步执行网络操作。
我为此编写了一个后台线程,它有无限循环来保持这个线程活着。它在正常情况下工作良好。但是在以下情况下,这会使前景变得迟钝:-
步骤 1- 让 Outlook 运行。第 2 步 - 锁定 Windows 系统 第 3 步 - 1 分钟后解锁。
当我从 Outlook 中禁用我的插件时,它在相同的案例中运行良好。我以以下方式实现了后台线程:-
void BackgroundTaskManager::onDoWork(System::Object^ sender,
DoWorkEventArgs^ e)
{
try
{
while (e->Cancel == false)
{
mRemoveList->Clear();
for each(KeyValuePair<uint64_t, BackgroundTask^>^ task in
mTasks)
{
task->Value->checkStarted();
if (task->Value->isComplete)
{
mRemoveList->Add(task->Key);
}
}
for each(uint64_t taskID in mRemoveList)
{
mTasks->Remove(taskID);
DarkEventLog::Debug(String::Format("Completed task
removed. {0}", taskID));
}
Sleep(1000);
if (DarkClientManager::instance->isRunning == false)
break;
}
}
catch (System::Exception^ ex)
{
throw ex;
}
}
在上面的代码中,即使 mtasks 和 mRemovelists 是空的,我仍然可以从打印中看到 Outlook 没有响应并且该线程正在运行。有人可以帮我在这里做错什么吗?
解决方案
推荐阅读
- bash - 为什么在 ERR 陷阱中退出 0 时 bash 会抑制标准输出?
- css - CSS网格并指定多个区域
- stackblitz - 刷新页面后从 stackblitz 中恢复代码
- android - 尝试使用 mainClassName 时出错
- excel - 有没有办法从 Sheet1 上的单元格或单元格范围中提取值并将其放在左页脚中,并为页脚设置字体颜色?
- python - 如何使用 Python 进入 Outlook 并列出具有特定主题名称的电子邮件的接收日期?
- opencv - 为什么opencv将灰度图像归一化为一个充满零的矩阵?
- java - 错误和构建失败:使用业力执行测试时
- python - Python-Selenium:无法从 html/javascript 字符串中抓取图像
- xslt - XSLT 2.0 - 如何在输出文件中默认包含属性?