개체 중 하나를 C++11
표준을 사용하는 여러 스레드로 전달하려고합니다.출력 스트림 개체 및 다른 인수를 여러 스레드에 전달
모든 스레드가 다른 출력 파일에 쓰길 원하기 때문에 ofstream
개체를 전달하고 싶습니다.
나는 이런 식으로 스레드 및 출력 스트림을 초기화하고 있습니다 :
는std::thread execution_threads[NUMBER_OF_THREADS]; // creating multiple empty threads
std::ofstream output_files[NUMBER_OF_THREADS]; // Empty output streams
// Opening and initializing the output files
각 스레드는 두 개의 인수를 취하는 함수 실행 : 그래서
void execution(int thread_id, std::ofstream& output_file)
을 나는 주위를 둘러 보았다 한 내가 ' 함수 func
에 복수의 인수가있는 a,b,c,d
이있는 경우 struct
을 사용할 필요가없고 std::thread t(func, a,b,c,d);
을 작성하여 전달할 수 있습니다. C++11
그래서 스레드를 실행하기 위해이 루프를 썼다 :
for (int i = 0; i < utils::NUMBER_OF_THREADS; i++) {
execution_threads[i] = std::thread(execution, i, output_files[i]);
}
것은이 코드는이 오류와 함께 컴파일되지 않는다는 것입니다 :
Call to implicitly-deleted copy constructor of
'typename decay<basic_ofstream<char, char_traits<char> > &>::type'
(aka 'std::__1::basic_ofstream<char, std::__1::char_traits<char> >')
나는이에 입력으로 struct
를 사용하는 경우 동안 모든 것이 정상적으로 작동합니다.
이렇게하면 모든 것이 잘 작동하여 완벽하게 실행됩니다. 하지만 컴파일러가 다른 메소드를 사용하는 경우 삭제 된 복사본 생성자를 사용하려고한다는 사실을 알리는 이유를 알 수 없습니다.
도움 주셔서 감사합니다.