请你帮我解决下面的面试问题.
考虑到功能Sleep(int seconds)实现以下接口,这样可以使用定时器:
void CreateTimer(void (*func)(), int seconds),她的void StartTimers(),她的启动的每个计时器都应该延迟几秒钟,然后使用回调来调用一个函数.例:
CreateTimer(func1,3);
CreateTimer(func2,7);
CreateTimer(func3,10);
StartTimers()
Run Code Online (Sandbox Code Playgroud)
下面应该发生:
延迟3秒然后调用功能1.延迟4秒然后调用功能2.延迟3秒然后调用功能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();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1348 次 |
| 最近记录: |