面试问题界面实施

时间:2011-05-06 22:08:05

标签: c++ interface

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

给定函数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。

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

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;

  1. 创建类型为
  2. 的全局字典
  3. 在创建计时器功能中,继续在词典中添加两个参数
  4. 在启动计时器功能中,在字典
  5. 中的各自值的Sleep之后调用每个func

答案 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];   }

}