2015-01-20 3 views
0

저는 일부 노동자가 가서 공유 된 문제에 대한 작업을 수행하는 기본적인 생산자/소비자 어플리케이션을 가지고 있습니다. 동시 또는 비슷한 것을 사용하는 것은 사소하지 않습니다. 그것은 매우 쉽게 다음과 같은 일을 할 수 있기 때문에 나는 스레딩을위한 Qt는을 사용하여 익숙해했습니다std :: threads를 사용하여 개체를 스레드로 이동 하시겠습니까?

for(int i = 0; i < nworkers; i++){ 
    Worker* myworker = new Worker(); 
    QThread* thread = new QThread; 
    myworker->attachToThread(thread); 

    myworker->doSomething(someArgument); 
    myworker->doSomethingElse(someOtherArgument); 
    myworker->run(); 
} 

내가 시도하고 학습 운동을 위해 부분적으로 std::thread 사용으로 전환하고 싶은 부분이 그래서 Qt에서 링크 할 필요가 없습니다. 그래서 내 질문에, 거기에 스레드에서 개체를 회전하고 다음 함수를 호출하는 간단한 방법은 무엇입니까? 위의 모델은이 경우 매우 잘 작동합니다. 솔직히 말해서 나는 std::async을 사용하여 모든 것을 작업자 함수에 인수로 전달할 수 있지만 대신 위의 코드를 표준 라이브러리의 관점에서 작성하는 방법이 있다면 궁금합니다.

은 내가

void foo(someArguments){ 
    Worker* myworker = new Worker(); 
    myworker->doSomething(someArguments); 
    myworker->run(); 
} 

같은 것을 할 그 스레드 수있는 것 같아요,하지만 모든 것이 foo 내부에 캡슐화된다. Qt를 사용하면 어디에서나 스레드 된 객체에 액세스 할 수 있습니다.

표준 라이브러리가있는 다른 스레드에서 함수를 실행하는 기본 사항은 이해하지만, 원하는 것은 큰 프레임 워크의 도움으로 만 가능할 수 있는지 궁금합니다.

답변

0

클래스 메소드를 스레드 함수로 실행 하시겠습니까?

std::thread t(&Worker::run, myworker, arg1, arg2, ...); 
t.join(); 

아니면 작업자 방법을 만들

Worker::runT() { 
    doSomething(); 
    doMore(); 
    std::thread t(&Worker::run, this); 
} 

당신은, 또는 소멸자

어딘가에서) (.join 둘 수 있었다
관련 문제