2011-05-06 37 views
6

Xin vui lòng giúp tôi với câu hỏi phỏng vấn sau đây.Thực hiện giao diện câu hỏi phỏng vấn

Với chức năng Sleep(int seconds) thực hiện giao diện sau đây để tính giờ có thể được sử dụng:

  • chức năng void CreateTimer(void (*func)(), int seconds) rằng mục đích của cô là để tạo timer
  • chức năng void StartTimers() rằng mục đích của mình để bắt đầu tất cả các giờ

Mọi bộ hẹn giờ bắt đầu phải trì hoãn trong vài giây và sau đó sử dụng gọi lại để gọi hàm. Ví dụ:

CreateTimer(func1,3); 
CreateTimer(func2,7); 
CreateTimer(func3,10); 
StartTimers() 

folowing nên xảy ra:

trễ trong 3 giây và sau đó gọi cho chức năng 1. trễ trong 4 giây và sau đó gọi cho chức năng 2. trễ trong 3 giây và sau đó gọi cho hàm 3.

Câu hỏi đặt ra là cách triển khai giao diện như thế nào?

+0

Nếu đây là một câu hỏi phỏng vấn trong cuộc phỏng vấn của bạn, nên không được trả lời tự quản lý? –

+9

Nó không có trong cuộc phỏng vấn của tôi. Có rất nhiều câu hỏi phỏng vấn trong trang web này mà mọi người hỏi ở đây vì vậy tôi không thấy bất kỳ vấn đề đặc biệt nào – Yakov

+1

Mọi bộ hẹn giờ đều bắt đầu cùng lúc, hay chạy cái khác? Nếu trước đây, sau đó nó chỉ có thể hoạt động nếu các cuộc gọi lại mất thời gian không đáng kể để thực thi. Nếu không, sự chậm trễ sẽ bị tắt. –

Trả lời

3

EDIT 1: Sử dụng API câu hỏi.

CHỈNH SỬA 2: Rất tiếc, không gọi q.pop();

Điều này nghe giống như một công việc cho std::priority_queue, được sắp xếp trước thời hạn.

//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

Các mã giả có thể là một cái gì đó giống như>

  1. Tạo một cuốn từ điển toàn cầu của loại
  2. Trong tạo chức năng hẹn giờ, tiếp tục bổ sung hai tham số có trong từ điển
  3. Trong chức năng bắt đầu hẹn giờ, gọi nhau của các funcs sau khi Giấc ngủ có giá trị tương ứng trong từ điển
+0

Bạn không thực sự cần một từ điển ở đây. Bất kỳ danh sách thứ tự/mảng/vector sẽ làm. – hammar

+0

bạn sẽ yêu cầu theo dõi thời gian đối với từng chức năng. do đó, một mảng/danh sách thứ nguyên sẽ không hoạt động. Bạn cần hai chiều. – neebz

+0

Tôi có nghĩa là một danh sách các hàm kết hợp với sự chậm trễ, tất nhiên. Tôi chỉ nói rằng kể từ khi bạn muốn họ trở lại theo thứ tự bạn đặt chúng vào, không cần một từ điển. – hammar

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

} 
Các vấn đề liên quan