2013-09-25 3 views
2

부스트를 사용 중이고 작업을 수행하고 종료 할 기본 thread_group을 만들려고합니다. 다음은 내 코드의 모습입니다.부스트 thread_group 무한 루프

2 개의 스레드로 시작되었고 두 스레드가 작업을 완료 한 후 무한 루프에 빠졌습니다. 아래에있는 것 :

iterator is: 0 
iteration #1 Press Enter to stop 
iteration #2 Press Enter to stop 

iterator is: 1 
iteration #1 Press Enter to stop 
iteration #3 Press Enter to stop 
iteration #2 Press Enter to stop 

iteration #4 Press Enter to stop 
iteration #3 Press Enter to stop 
iteration #5 Press Enter to stop 
iteration #4 Press Enter to stop 
iteration #6 Press Enter to stop 
iteration #5 Press Enter to stop 
iteration #7 Press Enter to stop 
^C 

나는 어디로 가고 있습니까?

답변

1

boost::thread t[]boost::thread_group threads; 사이에는 아무런 관계가 없습니다.

따라서 t[iterator].interrupt();threads.create_thread(boost::bind(&InputThread)) ;에 의해 생성 된 스레드에 영향을 미치지 않습니다. 이외에도

std::vector<boost::thread *> thread_ptrs; 
// ... 

    thread_ptrs.push_back(threads.create_thread(boost::bind(&InputThread))); 

    // ... 

    thread_ptrs[iterator].interrupt(); 

을 : 종종 유형에 사용되는 이름 "반복자를"하고 반복하는 가난한 값을 만드는

대신 할. 이 값에 i 또는 기타 관용적 이름을 사용하십시오.

+0

감사합니다. 문제가 해결되었습니다. 그래도 thread_group에 대한 더 나은 이해가 필요합니다. –

+0

@ user2816953 답변에 만족한다면 답변을 upvote 및/또는 수락하십시오. –

+0

나는 이미 대답을 받아 들였지만 여전히 upvote에 대한 충분한 명성이 없다. 방금 2 일 전에 서명 했어. 내가 거기에 도착하면 투표로 응답하는 당신의 찬성을 돌려 줄 것이다 :) –