您能否通过下面的面试问题帮助我。
给定的函数Sleep(int seconds)
实现以下接口(interface),因此可以使用计时器:
void CreateTimer(void (*func)(), int seconds)
,她的目的是创建计时器void StartTimers()
表示她启动所有计时器的目的每个启动的计时器应延迟几秒钟,然后使用回调来调用函数。
例子:
CreateTimer(func1,3);
CreateTimer(func2,7);
CreateTimer(func3,10);
StartTimers()
以下情况正在发生:
延迟3秒钟,然后调用函数1。
延迟4秒钟,然后调用函数2。
延迟3秒钟,然后调用函数3。
问题是如何实现这样的接口(interface)?
最佳答案
编辑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();
}
}
关于c++ - 面试题界面的实现,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5917510/