请你帮我解决下面的面试问题。
给定函数Sleep(int seconds)
实现以下接口,以便可以使用定时器:
void CreateTimer(void (*func)(), int seconds)
,她的目的是创建计时器void StartTimers()
,她的目的是启动所有计时器每个启动的计时器都应该延迟几秒钟,然后使用回调来调用一个函数。 例如:
CreateTimer(func1,3);
CreateTimer(func2,7);
CreateTimer(func3,10);
StartTimers()
应该发生以下情况:
延迟3秒然后调用功能1。 延迟4秒然后调用功能2。 延迟3秒钟然后调用功能3。
问题是如何实现这样的界面?
答案 0 :(得分:3)
编辑1:使用问题API。
编辑2:糟糕,没有调用q.pop();
这听起来像std::priority_queue
的工作,按截止日期排序。
//pseudo-code
class Job;
std::priority_queue<Job, std::vector<Job>, CompareLessByDeadline> q;
CreateTimer(func, deadline) {
q.push(Job(func, deadline));
}
StartTimers() {
now = 0;
while(!q.empty()) {
Job& j = q.top();
Sleep(j.deadline-now);
now = j.deadline;
j.function();
q.pop();
}
}
答案 1 :(得分:1)
psuedo代码可能类似于&gt;
答案 2 :(得分:1)
//globals vector v1; vector v2;
CreateTimer(func, delay) {
v1.push_back(func);
v2.push_back(delay); }
StartTimers() { startDelay=0;
for(i=0; i<v2.size; i++) {
sleep(v2[i]-startDelay);
*v1[i] //call the function
startDelay=v2[i]; }
}