2013-07-10 3 views
1

사용자가 시간을 입력하길 원합니다. 1400h - 그러면 1400h에 기능이 실행됩니다.특정 시계 시간에 기능 수행

어떻게하면됩니까?

컨텍스트 : 나는 같은 컴퓨터에서 작동하는 클라이언트 - 서버 프로그램이 - 나는

편집 (위와 같은 기능이있는) 동시에 메시지를 보낼 여러 노드를 필요 : 나는를 사용하지 않으려는 sleep() 기능이 이상적으로 문제는 클라이언트가 다른 시간에 시작된다는 것입니다. 1400 시간에 기능을 실행하게하는 뭔가를 호출하는 솔루션으로는 훨씬 더 깔끔합니다.

+0

나는 C++을위한 충분한 cron 모듈이있을 것이라고 확신한다. 그 중 하나를 사용해보십시오. –

+0

어떤 형태로든 sleep()을 호출해야합니다. 주변에는 방법이 없습니다. – ronag

답변

1

프로그램이 전체 시간 동안 실행되는 경우 sleep과 같은 기능을 사용하여 현재 시간과 1400 시간 사이의 시간을 대기하십시오. 프로그램이 다른 작업을 수행 할 수있게하려면 별도의 스레드에서이 작업을 수행하거나 sleep을 이벤트 루프 시간 초과 (프로그램이 이벤트 루프 기반 인 경우)로 바꿔야 할 수 있습니다.

프로그램을 종료해야하는 경우 Unix에서 at과 같은 시스템 기능을 사용하여 재시작 할 프로그램과 지정된 시간에 실행될 코드를 정렬해야합니다.

+0

다른 시간에 클라이언트가 시작되기 때문에'sleep (x) '를 사용하고 싶지는 않지만 동시에 실행하고 싶습니다. 나는이 질문을 업데이트 할 것이다! – sccs

+2

@sccs 그렇기 때문에 sleep (x)의'x'가 지금부터 1400h * 사이의 시간이어야합니다. – user4815162342

3

std::this_thread::sleep_until을 사용할 수 있습니다.

void main() 
{ 
    auto fire_time = /**/; 

    std::thread thread([&] 
    { 
      std::this_thread::sleep_until(fire_time); 
      fire(); 
    }); 
    thread.join();  
} 

당신은 당신이 찾고있는 것을 아마 도우미 기능으로 그 리팩토링 할 수

template<class Func, class Clock, class Duration> 
void run_at(Func&& func, const std::chrono::time_point<Clock,Duration>& sleep_time) 
{ 
    std::thread(std::bind([&](const Func& func) 
    { 
     std::this_thread::sleep_until(sleep_time); 
     func(); 
    }, std::move(func))) 
    .detach(); 
} 
+0

어떻게 사용합니까? - 프로그램에서 여러 스레드가 실행 중입니다. 스레드를 사용하는 것이 매우 새로운 기능입니다. 나는 별도의 스레드로 호출하고자하는 함수를 분리 할 수 ​​있지만 특정 스레드에서'sleep_until()'을 호출하려면 어떻게해야합니까? – sccs

+0

, "std :: this_thread :: sleep_until"질문에 대한 답변이 없습니까? "this"스레드, 즉 함수를 호출하는 스레드에서 대기합니다. – ronag

0

난 당신이 작업 관리자의 어떤 종류를 필요로 생각합니다. 그것은 기본 모델입니다. 잠자는 실을 사육하는 것은 그 일을하는 아주 잘못된 길입니다. 단일 관리자는 다음 작업을 실행할시기를 알 수 있습니다. 작업을 실행하는 방법은 또 하나의 질문입니다. 인터랙티브하게하려면 작업마다 새 스레드를 만들 수 있습니다. 또는 직렬화하여 관리자 스레드에서 실행할 수도 있습니다.