我们在C ++ / MFC中有一个Windows服务,它必须在主机工作站上执行许多任务,其中一些任务可能会长时间运行,并且在完成之前可能会失败几次。每项任务只需要按顺序完成一次。
我最初想到某种形式的回调来重试失败的任务,但每个函数都有完全不同的参数,代码已经编写和测试,只需要重新排队方法。
我以为我们可以将失败的任务写入注册表,sleep()一段时间然后重启服务。有更好的方法吗?
TIA ..
答案 0 :(得分:2)
我在我的专业项目中做了同样的事情。我的服务器组件从不同的源获取可运行的对象,并在一个单独的线程中按顺序执行它们。我所有的runnable对象都使用不同的参数,但它们都有一个函数run(void * pUserParam)。 void *参数是一个特殊对象,它包含不同类型的字段集合(double,string等)。
我的组件正在对runnable对象进行排队,并在每次释放线程时启动一个新对象。当然,当队列为空时我的组件正在休眠,当对象到达时唤醒。在您遇到任务失败的情况下,您只需要对其进行重新排队,它将在以后自动重试该任务。
要实现这些目标,您需要:
工作原理:
您的服务正在倾听需求,
这是我的方法,我知道这很好。我知道使用这种方法你需要重写你的应用程序的一部分但是在添加一种任务时唯一要修改的就是创建一个新的runnable对象(一种task =>一个继承自abstract的runnable对象一个)。
希望这会对你有所帮助