我也正在寻找像时事一样的 Java,但在我处理该问题时,我需要一个窗口C++。 在主要研究SO和学习通过班级成员的职能之后,我能够拿出一种似乎对我来说行之有效的解决办法。 我认识到,我回答这个问题已经过去了多年,但也许仍然寻求这一解决办法的人会认为这样做是有益的。
这是我通过视频演播室C++在Windows 10上测试的唯一窗户解决办法。 我仍在学习C++,因此,如果我打破任何规则,请听起来。 我认识到这些例外是最基本的,但很容易根据你们的需要加以调整。 我创建了一个类似于贾瓦语的时台。 你们需要从PierrTask语组学到一个新的用户级,并创建“任务”功能,包括你希望定期执行的代码。 The TimerTask上班:
--TimerTask.h--
#pragma once
#include <thread>
class TimerTask {
HANDLE timeoutEvent;
DWORD msTimeout;
bool exit = false;
void* pObj;
static void taskWrapper(TimerTask* pObj) {
while (!pObj->exit) {
DWORD waitResult = WaitForSingleObject(pObj->timeoutEvent, pObj->msTimeout);
if (pObj->exit)
break;
pObj->task();
}
}
public:
TimerTask::TimerTask() {
timeoutEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
if (!timeoutEvent) {
throw "TimerTask CreateEvent Error: ";
}
}
TimerTask::~TimerTask() {
CloseHandle(timeoutEvent);
}
// Derived class must create task function that runs at every timer interval.
virtual void task() = 0;
void start(void* pObj, DWORD msTimeout) {
this->pObj = pObj;
this->msTimeout = msTimeout;
std::thread timerThread(taskWrapper, (TimerTask*)pObj);
timerThread.detach();
}
void stop() {
exit = true;
if (!SetEvent(timeoutEvent))
throw "TimerTask:stop(): Error: ";
}
};
这里是使用的实例。 就简便而言,我没有包括错误检查。
--Test.cpp--
#include "Windows.h"
#include <iostream>
#include "TimerTask.h"
using namespace std;
class KeepAliveTask : public TimerTask {
public:
void task() {
cout << "Insert your code here!
";
}
};
int main()
{
cout << "Hello, TimerTask!
";
KeepAliveTask keepAlive;
keepAlive.start(&keepAlive, 1000); // Execute once per second
Sleep(5100); // Pause 5.1s to give time for task thread to run.
keepAlive.stop();
Sleep(1000); // Pause another sec to give time for thread to stop.
return 0;
}