2014-09-30 2 views
0

두 개의 스레드, 예를 들어 1과 2가 있고 잠을 2 개 있습니다. 1은 작업을 수행하고 작업 완료 후 2 초 후에 깨어나도록 타이머를 설정합니다.특정 시간이 지나면 스레드 깨우기

그래서 2 초 후에 신호를 보내도록 프로그래밍해야합니다. 이것을 어떻게 할 수 있습니까?

+1

조건 변수를 사용하십시오. 어떤 프레임 워크를 사용하고 있습니까? – nikitoz

+0

@nikitoz'pthreads' – harper

+0

작업 직후 스레드 2에 신호를 보내고 신호에 반응하기 전에 해당 스레드가 't 초 기다리지 않겠습니까? – user2079303

답변

0

C++ 11보다 먼저 표준 라이브러리는 타이머를 제공하지 않았습니다. C++ 11을 사용하더라도 대기 시간 조절 기능 (예 : 절전, 조건 변수 등)이 있지만 원하는 동작을 위해 어셈블해야합니다.

그래서, 당신은 대략 다음과 같은 otions 있습니다

  • 일부 특정 (크로스 플랫폼) 라이브러리에 의존하는 (예를 들어, Qt는, 부스트 등)
  • 은 OS 수준의 시설에 의존 (예 : , Posix on Linux)
  • 타이머로 작동하는 세 번째 스레드 만들기 : 일단 활성화되면 2 초 동안 대기 한 다음 조건 변수를 통해 두 번째 스레드에 신호를 보냅니다.
  • 첫 번째 스레드가 작업 완료, 잠자기 후 다른 스레드로 신호 보내기 조건 변수

나는 마지막 옵션을 제안합니다.

+0

표준 라이브러리에는 스레드를 잠자기 상태로 만들고 뮤텍스를 기다리고 상태 변수를 기다리고 미래를 기다리는 타이머가 있습니다. –

+0

마지막 옵션을 이해하지 못했지만, 자세히 설명해 주시겠습니까? - 첫 번째 잤어 후 두 번째 스레드 신호 수있는 방법? 첫 번째 스레드에서 신호를 보낼 타이머를 설정하려고합니다. – glugglug

1

조건 변수에 시간 대기를 사용할 수 있습니다.이 시간 변수는 해당 시간에 도달하거나 경과하면 활성화됩니다. 또한 일정 시간 동안 스레드를 잠자기 상태로 만들 수도 있습니다.

pthread (사용자 지정)는 절대 시간까지 대기합니다.

새로운 표준 C++ 라이브러리 및 부스트는 wait_for(time_period) 또는 wait_until(absolute_time)의 옵션을 제공합니다.

귀하의 경우에는이 작업을 수행 할 필요가 있다고 생각하지 않지만 제 3 스레드를 사용할 수 있습니다.

  1. 스레드 (1)가 작업을 수행하고, 상태 변수, 스레드 2 개 대기 스레드 1이 스레드를 인용하고 나면 제 3 스레드를 생성하는 작업을 완료했을 때에 2

  2. 스레드 (1)가 작업을 수행하고 스레드 2가 보유한 조건 변수를 즉시 알려주지 만 스레드 2는 계속 진행하기 전에 일시 정지합니다. (그래서 실제로는 더 일찍 깨우지 만 지연을 시뮬레이트합니다.) 세 번째 쓰레드는 필요 없습니다. 그러나 쓰레드 2는 "클라이언트"쓰레드 일 수 있습니다. 지연을 적용하려면 메서드 1을 사용하십시오.

+0

작업이 완료되면 즉시 스레드 2가 깨어나고 시간 초과가 발생하여 다시 절전 모드로 전환되는 경우 세 번째 스레드를 제거 할 수 있습니다. –

+0

그렇습니다. 방법 2입니다. 그러나 스레드 2가 클라이언트에 의해 보관되어 있고 지연되도록하려면 방법 1을 사용하십시오. – CashCow

+0

아, 그래 ... 대답이 편집되었거나 방금 했습니까? 끝까지 읽지 않니?! :-) –

관련 문제