0
이것은 단순한 설계 오류라고 확신하지만 어쨌든 어디로 가야할 지 잘 모르겠습니다.존재하는 클래스의 C++ 11 스레드
클래스의 인스턴스에서 스레드를 생성하고 싶습니다. 특히 :
class Foo
{
public:
void bar() { /*do stuff*/ }
};
사용
:int main()
{
Foo foo_instance();
std::thread foo_thread(foo_instance.bar);
foo_thread.join();
return 0;
}
나는이의 더 자세한 버전을 컴파일 할 때, 내가 할 invalid use of non-static member function
라인 std::thread foo_thread(foo_instance.bar);
참조.
그래서 내가 여기에서 오해는 무엇입니까? 스레드로 회전하기 전에 객체를 초기화하고 "기능적"으로하고 싶습니다. 그러나 도구를 올바르게 사용하지는 않습니다.
을 또는 당신은 단순히 스레드의 ctor'표준 : : 스레드 foo_thread (푸 :: 바, foo_instance)에 인수로 인스턴스를 제공 할 수 있습니다; '. – Snps
하지만 작동하지만 인수는'std :: thread' ctor에 의해 복사되고이'std :: thread foo_thread (& Foo :: bar, std :: ref (foo_instance))와 같이'std :: ref'를 사용해야합니다; '스레드가 일시적으로 복사 된'foo_instance'와 함께 작동합니다 – galop1n
예, 복사 동작이 이유로 만들어졌습니다. * 대부분 * 원하는 * 것입니다. 로컬 복사본을 사용하면 간접 및 동기화 문제 등을 해결할 수 있습니다.하지만 스레드가 호출 스레드의 인스턴스를 업데이트하도록하려면 참조가 필요합니다. 그리고 동기화. – Snps