面试问题界面实施

Yak*_*kov 6 c++ interface

请你帮我解决下面的面试问题.

考虑到功能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.

问题是如何实现这样的界面?

Rob*_*obᵩ 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)