나는 다음과 같은 C++ 11 코드가 있습니다std :: future timeouts가 너무 일찍 발생 했습니까?
내 노트북에auto f = std::async(std::launch::async, []() { myfunction(); });
std::future_status status;
do {
status = f.wait_for(std::chrono::seconds(1));
if (status == std::future_status::timeout) {
fprintf(stderr, "Hello!\n");
}
} while (status != std::future_status::ready);
이 매 초마다 myfunction()
실행을위한 즉 미세 (GCC 버전 4.7.3 (우분투/리나 4.7.3-1ubuntu1을)), 실행을 I "안녕하세요!" 산출. GCC 버전 내 ARM 보드 그러나
myfunction()
까지 완료됩니다.
http://en.cppreference.com/w/cpp/thread/future/wait_for에 따르면 제한 시간이 만료 된 경우에만 시간 초과 상태를 가져야합니다.
GCC ("C++ 11 future_status::deferred not working"참조)에서 "Timed waiting functions가 future_status :: deferred를 반환하지 않습니다"라고 생각됩니다. 그러나 myfunction()
가 실행되므로 결국 항상 "시간 초과"를 반환해서는 안됩니다. 그렇지 않습니까?
ARM 플랫폼에서 future :: wait_for에 대한 경험이있는 사람이 있습니까? 아니면 누구든지이 문제에 대해 알려줄 수 있습니까?
내 경험에 의하면 일부 stdlibC++는 x86에서 4.7에 완전히 업데이트되지 않았지만 ARM에서는 훨씬 더 좋지 않다고 생각합니다. 당신은 boost :: future를 시도 했습니까? 아마도 당신은 * std :: future 타임 아웃을 너무 일찍 사용하고 있습니다. – user3125280
아니요, 아직 없습니다. 외부 라이브러리의 사용을 제한하려고합니다. 표준 라이브러리에 구현이 있거나 존재해야합니다. – Frankie
표준 라이브러리는 단지 부스트 포트 일뿐입니다. C++ 11 버전이 시스템에서 작동하지 않는 경우 부스트가 발생할 수 있습니다. 그들이 어떤 상태로 돌아오고 있습니까? – user3125280