스레드와 바인드 상호 작용에 약간의 문제가 있습니다.C++ Bind를 사용하여 스레드를 생성 할 때 문제가 발생했습니다.
그것은 간단하다, 지금 모든 것이 괜찮아 잘 때까지,이 상황을
class myclass {
// ...
// ...
void dosome();
void doanother(myclass2, myclass3*);
void run() {
this->_myt = boost::shared_ptr<boost::thread>(
new boost::thread(boost::bind(&myclass::dosome, this)));
}
// ...
boost::shared_ptr<boost::thread> _myt;
//...
};
확인을해야합니다. 바인드는 함수 또는 함수 포인터를 일부 값 이상, 일부 인수 값에 바인딩 할 수 있음을 이해합니다. myclass 객체에서 function()을 호출하면 새 스레드가 시작됩니다. 질문 : 왜 함수 bind가 어떤 매개 변수도 사용하지 않을 때, 바인드가 실행 중에 매개 변수를 취하는 이유는 무엇입니까? 그것은 클래스 함수에 대해 클래스에 대한 포인터 인 암시 적 인수가 항상 있기 때문입니다.
정상적으로 이것은 내 유일한 문제가 아닙니다. 내 첫 번째 스레드의 실행 흐름이다 내부 dosome, 나는이 작업을 수행 :
void myclass::dosome() {
myclass2 m;
myclass3* x = new myclass3;
boost::shared_ptr<boost::thread>(new boost::thread(
boost::bind(&myclass::doanother, m, x, this))); // Line X
}
그럼 내가 다른 스레드를 간부 인 싶어. 첫 번째 질문 : shared_prt는 스마트 포인터입니다. 즉, dosome()이 exec 흐름에서 벗어나면 해당 범위에서 실행 한 스레드가 지속되어 shared_ptr이됩니다. 이것이 올바른지 말해주세요. 두 번째 질문 : 컴파일러는 줄 X의 명령어에 대해 정말로 화를냅니다. 문제는 바인드입니다. 아마도 내가 통과 한 것이 마음에 들지 않습니다 ... 이유는 무엇입니까? 이것은 멤버 함수입니다 (나는 doanother에 대해 이야기합니다). 그리고 두 개의 인자가 더해졌습니다 ... 어디에 문제가 있습니까?
가 부스트 :: 바인드 '이'첫 번째 매개 변수입니다 들어 당신에게
코드를 선택하고 Ctrl + K를 눌러 코드를 포맷하십시오. 미리보기를 사용하십시오. – EboMike