리눅스 환경에서 타이머를 만들거나 C++에서 500ms를 측정하는 방법을 알아야합니다. 나는 gettimeofday를 사용하고 시간 구조를 사용하려고 시도했지만 밀리 초 동안 정확한 정밀도를 얻지 못했습니다. 내가하려고하는 일은 최대 500ms 동안 작업을 계속하는 것입니다. 500ms 후 다른 일이 발생합니다.C++ timer linux
답변
다음 가장 좋은 방법은이 표준 : 크로노 라이브러리를 사용하는
http://en.cppreference.com/w/cpp/chrono/duration
당신이 그것을 원하는 어떻게 수행 할 작업을 완전히 확실하지 않다 정확히 500ms를 기다려야합니까?
그렇게이 그
std::this_thread::sleep_for(std::chrono::milliseconds(500));
에 대한 당신은 평가시기 여부를 확인하기 위해 500 밀리 초 한 번 포인터를 얻어서 경과 할 때까지 작업을하고 확인하실 수 있습니다 - system_time : 지금은()입니다 이상은 500ms
//if you compiler supports it you can use auto
std::chrono::system_clock::time_point start=std::chrono::system_clock::now();
while(start-std::chrono::system_clock::now()
< std::chrono::milliseconds(500))
{
//do action
}
C++ 11이 없으면 부스트 크로노 라이브러리에서도 작동합니다. 이 방법의 장점은 리눅스 시간 함수를 사용하는 것과는 달리 이식성이 있다는 것입니다. 당신이 리눅스에 있기 때문에
1. C++ 0x는 아직 실험 단계입니다. 2. CPU가 대기 기간 동안 묶여 있습니다. – YankeeWhiskey
1). GCC에서 적어도 std :: chrono는 훌륭하게 작동합니다. 2). 잠자기 기능을 의미하는 경우 유휴 상태가됩니다. 예를 들어 나중에 예를 들자면 OP가 500ms가 경과 할 때까지 작업을 수행하려는 작업을 정확하게 수행합니다. 대기 기간이 무슨 뜻인지 알지 못합니다. – 111111
정확한 정밀도를 얻을 수없는 이유 또는 시도 할 때 어떤 일이 발생하는지에 대해서는 분명하지 않지만 gettimeofday
에 문제가있는 경우 clock_gettime
을 사용하는 것이 좋습니다. 자세한 내용은 man clock_gettime
을 참조하십시오. 당신이 C++ (11)에 액세스 할 수있는 경우
, 당신은 몇 마이크로 초 기간 동안 프로세스의 잠을 드릴 것입니다 어느
int usleep(useconds_t usec);
usleep 시스템 호출을 사용할 수 있습니다. 나는 이것이 올바른 완전히 확실하지 않다
''nanosleep' 또는'poll '과 같은 멀티플렉싱 호출 (예 : 입력을 기다리는 경우) –
#include <chrono>
#include <iostream>
#include <future>
#include <atomic>
void keep_busy(std::chrono::milliseconds this_long,std::atomic<bool> *canceled) {
auto start = std::chrono::high_resolution_clock::now();
while(std::chrono::high_resolution_clock::now() < start+this_long) {
std::cout << "work\n";
std::this_thread::sleep_for(std::chrono::milliseconds(50));
if(canceled->load()) {
std::cout << "canceling op\n";
throw "operation canceled";
}
}
}
int main() {
std::atomic<bool> canceled(false);
auto future = std::async(std::launch::async,
keep_busy,std::chrono::milliseconds(600),&canceled);
std::this_thread::sleep_for(std::chrono::milliseconds(500));
canceled.store(true);
try {
future.get();
std::cout << "operation succeded\n";
} catch(char const *e) {
std::cout << "operation failed due to: " << e << '\n';
}
}
...의
- 1. C# Timer Stop Confusion
- 2. C#, mvc, backbone, timer
- 3. clock_getres - newbie 사용 Linux C
- 4. simple_html_dom timer?
- 5. C# Timer Tick 이벤트 작동 원리
- 6. C# timer - 'Method name expected'오류가 발생했습니다.
- 7. C++ Timer 클래스, QNX에서 펄스 메시지 사용
- 8. Watch Dog Timer
- 9. C/C++ 데몬 쓰기 (Linux)
- 10. C (Linux)에서 타이머를 코딩하는 방법은 무엇입니까?
- 11. C++ linux 사용자 추가
- 12. C linux 프록시 서버
- 13. Linux Reference for C++?
- 14. C# (Linux 및 Mac)
- 15. linux C 문자열을
- 16. linux gpio c api
- 17. MySQL 커넥터 C++ linux
- 18. C# System.PlatformID.Unix vs. Linux
- 19. Linux exec from C++
- 20. USB 프로그래밍 : C/Linux
- 21. Timer 메서드에서 pictureBox1 속성을 변경하십시오.
- 22. boost :: timer :: auto_cpu_timer에 대한 정의되지 않은 참조
- 23. timer fire twice
- 24. android timer swing
- 25. Jquery Cookie/Timer 문제
- 26. Flex : Timer + HTTPService
- 27. php timer facebook games
- 28. Jquery Timer 서버 시간에
- 29. Java timer & paintcomponent issues
- 30. android : timer : 전화가 끊겼습니다
가능한 중복 [리눅스에서 현재 프로세서 시간을 검색하는 방법?] (http://stackoverflow.com/questions/3107121/ 현재 프로세서가있는 시간을 가져 오는 방법) – Shahbaz