目录
💠 需求背景
一些用户说任务数量可能达到200个,让我比较惊讶,这个软件的设计之初并没有考虑这么多的任务数量。考虑这个用户的需求,我重新调整了检测触发器触发的多线程并发的算法。具体算法调整细节本文详细解释如下。
◆ V6.4版及之前的并行检测方案
按照12种【触发器类型】创建 12个检测线程,每个线程负责一种触发器类型的触发检测。
触发器类型 | 触发检测线程 |
倒计时 | CheckTriggerFireThread_1 |
伴随软件启动 | CheckTriggerFireThread_2 |
空闲时间 | CheckTriggerFireThread_3 |
间隔时间 | CheckTriggerFireThread_4 |
具体时间 | CheckTriggerFireThread_5 |
每分钟 | CheckTriggerFireThread_6 |
每小时 | CheckTriggerFireThread_7 |
每天 | CheckTriggerFireThread_8 |
每周 | CheckTriggerFireThread_9 |
每月 | CheckTriggerFireThread_10 |
每年 | CheckTriggerFireThread_11 |
Cron表达式 | CheckTriggerFireThread_12 |
(表1,按照触发器种类,划分12个线程并发检查各类型触发器的触发条件)
◆ V6.4版及之前代码
按照触发器种类创建线程代码:
// start check firetime thread by trigger type
for (size_t i = 0; i< N_COUNT_TRIGGER_TYPE ; i++)
{
CheckTriggerFireThread* pworkerthread = new CheckTriggerFireThread(this, (NTriggerType)i);
if ( pworkerthread->Create() != wxTHREAD_NO_ERROR)
{
wxLogError(_("Can't create thread!"), _("Timing Executor"));
return;
}
if ( pworkerthread->Ru