您能否通过下面的面试问题帮助我。

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

    10-11 16:53