2010-07-02 2 views
0

특정 작업을 수행하기 위해 지정된 간격으로 깨우기 데몬 스레드가 있습니다. 이제 스레드에 두 개의 작업을 더 추가해야합니다. & 이러한 작업에는 고유 한 간격이 있습니다. 모든 x 초 후다른 간격으로 깨우기위한 데몬 스레드

  • 같은 뭔가 작업 1을
  • 모든 Y 초 Task2을 한 후
  • 모든 Z 초 Task3는

그래서 나는 기본적으로 수면 로직을 마련해야합니까 후 모든 작업이 적시에 완료되었는지 확인하십시오. 이 작업을 수행하는 가장 좋은 방법은 무엇입니까? 이것에 대한 내 생각은 각 작업이 수행되는 시간이 산술 진행이므로 각 작업에 해당하는 AP를 결합해야합니다. & 해당 시리즈를 사용하여 잠자기 시간뿐 아니라 수행 할 다음 작업. 이 접근법이 의미가 있습니까?

답변

0

당신은 아마 이런 식으로 뭔가를 할 수 있습니다

now = time_in_seconds() 
time_since_task1 = x - (now % x) 
time_since_task2 = y - (now % y) 
time_since_task3 = z - (now % z) 

shortest_interval = min(min(time_since_task1, time_since_task2), time_since_task3) 
sleep(shortest_interval) 

그런 다음 당신은이 "now 새로운"0 모드 X, Y, Z와 동일한 경우 확인하고 필요한 작업을 수행 할 수 있습니다.

+0

로직을 설명해 주시겠습니까? time_in_seconds는 무엇을 반환합니까? 그것은 초 단위의 현재 시간입니까? – Raam

+0

@Raam : 이상적으로 프로그램이 시작된 이후 경과 한 시간 - 작업의 참조 시작 지점이어야합니다. – casablanca

+0

raam : 현재 시간 (초). 시작시의 시간 (초 단위)을 뺀 것이 가능합니다 (각 작업의 첫 번째 실행에 차이가 있음). – Vatine