2008-09-30 3 views

답변

0

아마 신호를 내고 싶습니까?

Qt의 신호 및 슬롯 기능이 정말 좋았으며 Boost에는 신호/슬롯도 있습니다. Boost에서 신호/슬롯을 사용한 적은 한번도 없었습니다.

+0

이것이 유일한 문제는 비동기 적으로 작동하지 않을 수 있으며, 그렇다면 루프에 신호를 "게시"하도록 설정된 이벤트 루프가 필요할 것입니다. 그렇지 않으면 다시 스레드에 던져서 잊어 버리는 것입니다. –

3

그럼 스레드를 회전시킨 다음 다시는 참여할 수 없습니다. 같은 뭔가 다음 some_thread 변수가 범위를 벗어나되면

boost::thread some_thread(&SomeFunction, param1, param2); 

는, 실행의 스레드가 분리되고 다시 결합 할 수 없습니다. 이 함수의 처리 시간이 중요하지 않은 한 스레드를 회전시키는 것은 낭비입니다.

3

나는 한동안 부스트 : : 스레드를 사용하지 않은하지만 난 documentation page for the class에 빠른 예를 참조하십시오

void find_the_question(int the_answer); 

boost::thread deep_thought_2(find_the_question,42); 

나는 즉시 그 기능을 완료로 생각을 스레드는 종료됩니다. 이것은 쓰레드가 범위를 벗어나면 파괴 될 것입니다. 이것이 작동하지 않는다면, 아마도 장기 실행 쓰레드 풀을 생성하고 boost :: bind 합성물로 펑터를 전달해야 할 것입니다.

1

얼마나 자주이 작업을 수행하는지에 따라 작업 대기열과 함께 스레드 풀을 만드는 것이 가장 좋습니다. 쓰레드를 만들면 1 초에 수십 번 시도 할 때 많은 오버 헤드가 발생할 수 있습니다. 반환 값에 대해 신경 쓰지 않으면 정말 쉽습니다.

스레드를 두 개 (또는 열 개) 위로 돌립니다. 펑터의 스레드 안전 큐를 호출하여 (함수에 매개 변수를 바인드하고 대기열에 넣는다); 쓰레드는 대기열에서 무엇인가 보여주기 위해 대기하며, 깨어나는 첫 번째 쓰레드는 작업을 처리합니다. 스레드가 작업 실행을 마쳤 으면 스레드는 대기열에서 다시 대기합니다.

this project에서 한 가지 방법을 찾아보십시오.

물론 UI의 응답 속도를 향상시키기 위해 2 초마다 비동기식으로 호출하는 경우 매번 새로운 스레드를 시작하는 것이 더 쉽습니다.

관련 문제