문제

C ++ 프로그램에 시간이 지연된 지연을 추가하려고 노력하고 있으며 누군가 내가 시도 할 수있는 내용이나 내가 볼 수있는 정보에 대한 제안이 있는지 궁금해하고 있습니까?

이 시간 지연을 구현하는 방법에 대한 자세한 내용이 있었으면 좋겠지 만 시간 지연을 추가하는 방법에 대한 자세한 정보가있을 때 까지이 구현을 시도 해야하는 방법에 대해서는 확실하지 않습니다.

도움이 되었습니까?

해결책

Win32 : Sleep(milliseconds) 당신은 무엇입니다

유닉스 : usleep(microseconds) 당신이 원하는 것입니다.

수면 ()은 종종 너무 길어 몇 초만 걸립니다.

다른 팁

C ++ 11에 대한 업데이트 된 답변 :

사용 sleep_for 그리고 sleep_until 기능 :

#include <chrono>
#include <thread>

int main() {
    using namespace std::this_thread; // sleep_for, sleep_until
    using namespace std::chrono; // nanoseconds, system_clock, seconds

    sleep_for(nanoseconds(10));
    sleep_until(system_clock::now() + seconds(1));
}

이러한 기능을 사용하면 더 이상 더 나은 해상도를 위해 새로운 기능을 지속적으로 추가 할 필요가 없습니다. sleep, usleep, nanosleep, 등. sleep_for 그리고 sleep_until 해상도 값을 통해 모든 해상도 값을 수용 할 수있는 템플릿 함수입니다. chrono 유형; 시간, 초, 펨토초 등

C ++ 14에서는 문자 접미사로 코드를 더 단순화 할 수 있습니다. nanoseconds 그리고 seconds:

#include <chrono>
#include <thread>

int main() {
    using namespace std::this_thread;     // sleep_for, sleep_until
    using namespace std::chrono_literals; // ns, us, ms, s, h, etc.
    using std::chrono::system_clock;

    sleep_for(10ns);
    sleep_until(system_clock::now() + 1s);
}

실제 수면 기간은 구현에 따라 다릅니다. 10 나노초를 위해 수면을 요청할 수 있지만, 구현은 가장 짧은 경우 대신 밀리 초 동안 잠을 자게 될 수 있습니다.

#include <unistd.h>
usleep(3000000);

이것은 또한 3 초 동안 잠을 자게됩니다. 그래도 숫자를 조금 더 세분화 할 수 있습니다.

당신은 단순한 것을 원하십니까?

sleep(3);

이것은 실이 수면 기간에 가까워 질 시간을 보장하지 않으며, 스레드가 계속 실행되기 전의 시간이 최소한 원하는 양이 될 것임을 보장합니다. 실제 지연은 상황에 따라 다르며 (특히 문제의 기계에 부하) 원하는 수면 시간보다 크기가 높을 수 있습니다.

또한 수면이 필요한 이유를 나열하지는 않지만 일반적으로 동기화 방법으로 지연을 사용하지 않아야합니다.

Select (2) 마이크로 초 정밀도를 원한다면 (2)를 사용할 수 있습니다 (이것은 잠을 자지 못하는 플랫폼에서 작동합니다 (3)).

다음 코드는 1.5 초를 기다립니다.

#include <sys/select.h>
#include <sys/time.h>
#include <unistd.h>`

int main() {
    struct timeval t;
    t.tv_sec = 1;
    t.tv_usec = 500000;
    select(0, NULL, NULL, NULL, &t);
}

`

나는 그것을 발견했다 "_sleep(milliseconds);" (인용문없이)는 Win32에 적합합니다. chrono 도서관

예 :

#include <chrono>

using namespace std;

main
{
    cout << "text" << endl;
    _sleep(10000); // pauses for 10 seconds
}

수면 전 밑줄을 포함시켜야합니다.

예, 수면은 아마도 여기에서 선택한 기능 일 것입니다. 함수로 전달 된 시간은 호출 스레드가 비활성화되는 가장 작은 시간입니다. 예를 들어 5 초로 수면에 전화하면 스레드가 5 초 이상 자게 될 것입니다. OS가 수행하는 일에 따라 6 또는 8 또는 50 일 수 있습니다. (최적의 OS 실행 중에 이것은 5에 매우 가깝습니다.)
수면 기능의 또 다른 유용한 특징은 0을 전달하는 것입니다. 이렇게하면 스레드에서 컨텍스트 전환이 강화됩니다.

몇 가지 추가 정보 :
http://www.opengroup.org/onlinepubs/000095399/functions/sleep.html

이 코드 스 니펫을 시도 할 수 있습니다.

#include<chrono>
#include<thread>

int main(){
    std::this_thread::sleep_for(std::chrono::nanoseconds(10));
    std::this_thread::sleep_until(std::chrono::system_clock::now() + std::chrono::seconds(1));
}

고정 시간 동안 CPP의 출력을 지연 시키려면 Windows.h 헤드러 파일 구문을 포함하여 Sleep () 기능을 사용할 수 있습니다.

cout<<"Apple\n";
Sleep(3000);
cout<<"Mango";

산출. 위의 코드는 Apple을 인쇄하고 망고 인쇄하기 전에 3 초 동안 기다립니다.

통사론:

빈 공간 수면 (서명되지 않은 초);

수면 ()는 간격 (초)의 실행을 일시 중단합니다. 수면 요청을 통해 현재 프로그램은 인수 초에 지정된 초의 수에 대한 실행이 중단됩니다. 이 간격은 가장 가까운 백분의 1 초만 또는 운영 체제 클록의 정확도에만 정확합니다.

다른 많은 사람들은 수면에 대한 좋은 정보를 제공했습니다. 나는 수면이 가장 적절한 해결책이 거의 없다는 것에 동의합니다.

당신이 무언가를 기다릴 때 자고 있다면, 당신은 실제로 그 물건/이벤트를 기다리는 것이 좋습니다. 이에 대한 조건 변수를보십시오.

나는 당신 이이 작업을 수행하려는 OS를 모르지만, 스레딩 및 동기화를 위해 스레딩 부스트 라이브러리 (조건을 가변적입니다).

예외적으로 짧은 기간을 기다리려고한다면 몇 가지 해킹 스타일 옵션이 있습니다. '수면'이 구현되지 않은 일종의 임베디드 플랫폼에서 작업하는 경우 빈 본체로 간단한 루프 (/While 등)를 시도 할 수 있습니다 (컴파일러가 최적화하지 않음). 물론 대기 시간은이 경우 특정 하드웨어에 따라 다릅니다. 정말 짧은 '기다림'을 위해 "NOP"어셈블리를 시도 할 수 있습니다. 나는 이것이 당신이 추구하는 것임을 의심하지만 왜 기다려야하는지 모르면 더 구체적으로하기가 어렵습니다.

Windows에는 Windows 라이브러리를 포함하고 "Sleep (0); 프로그램을 자려고. 밀리 초를 나타내는 값이 필요합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top