두 개의 스레드, 예를 들어 1과 2가 있고 잠을 2 개 있습니다. 1은 작업을 수행하고 작업 완료 후 2 초 후에 깨어나도록 타이머를 설정합니다.특정 시간이 지나면 스레드 깨우기
그래서 2 초 후에 신호를 보내도록 프로그래밍해야합니다. 이것을 어떻게 할 수 있습니까?
두 개의 스레드, 예를 들어 1과 2가 있고 잠을 2 개 있습니다. 1은 작업을 수행하고 작업 완료 후 2 초 후에 깨어나도록 타이머를 설정합니다.특정 시간이 지나면 스레드 깨우기
그래서 2 초 후에 신호를 보내도록 프로그래밍해야합니다. 이것을 어떻게 할 수 있습니까?
C++ 11보다 먼저 표준 라이브러리는 타이머를 제공하지 않았습니다. C++ 11을 사용하더라도 대기 시간 조절 기능 (예 : 절전, 조건 변수 등)이 있지만 원하는 동작을 위해 어셈블해야합니다.
그래서, 당신은 대략 다음과 같은 otions 있습니다
나는 마지막 옵션을 제안합니다.
표준 라이브러리에는 스레드를 잠자기 상태로 만들고 뮤텍스를 기다리고 상태 변수를 기다리고 미래를 기다리는 타이머가 있습니다. –
마지막 옵션을 이해하지 못했지만, 자세히 설명해 주시겠습니까? - 첫 번째 잤어 후 두 번째 스레드 신호 수있는 방법? 첫 번째 스레드에서 신호를 보낼 타이머를 설정하려고합니다. – glugglug
조건 변수에 시간 대기를 사용할 수 있습니다.이 시간 변수는 해당 시간에 도달하거나 경과하면 활성화됩니다. 또한 일정 시간 동안 스레드를 잠자기 상태로 만들 수도 있습니다.
pthread (사용자 지정)는 절대 시간까지 대기합니다.
새로운 표준 C++ 라이브러리 및 부스트는 wait_for(time_period)
또는 wait_until(absolute_time)
의 옵션을 제공합니다.
귀하의 경우에는이 작업을 수행 할 필요가 있다고 생각하지 않지만 제 3 스레드를 사용할 수 있습니다.
스레드 (1)가 작업을 수행하고, 상태 변수, 스레드 2 개 대기 스레드 1이 스레드를 인용하고 나면 제 3 스레드를 생성하는 작업을 완료했을 때에 2
스레드 (1)가 작업을 수행하고 스레드 2가 보유한 조건 변수를 즉시 알려주지 만 스레드 2는 계속 진행하기 전에 일시 정지합니다. (그래서 실제로는 더 일찍 깨우지 만 지연을 시뮬레이트합니다.) 세 번째 쓰레드는 필요 없습니다. 그러나 쓰레드 2는 "클라이언트"쓰레드 일 수 있습니다. 지연을 적용하려면 메서드 1을 사용하십시오.
작업이 완료되면 즉시 스레드 2가 깨어나고 시간 초과가 발생하여 다시 절전 모드로 전환되는 경우 세 번째 스레드를 제거 할 수 있습니다. –
그렇습니다. 방법 2입니다. 그러나 스레드 2가 클라이언트에 의해 보관되어 있고 지연되도록하려면 방법 1을 사용하십시오. – CashCow
아, 그래 ... 대답이 편집되었거나 방금 했습니까? 끝까지 읽지 않니?! :-) –
조건 변수를 사용하십시오. 어떤 프레임 워크를 사용하고 있습니까? – nikitoz
@nikitoz'pthreads' – harper
작업 직후 스레드 2에 신호를 보내고 신호에 반응하기 전에 해당 스레드가 't 초 기다리지 않겠습니까? – user2079303