Передача локального вектора по потоку по значению/копииC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Передача локального вектора по потоку по значению/копии

Сообщение Anonymous »

Насколько я понимаю, обычно считается безопасным передать локальную переменную в поток, когда не std :: ref () .
Мой вопрос заключается в том, как следует обрабатывать передачу локального std :: vector , когда потоки C ++ требует std :: ref () для использования в Vestors? /> Я скопирую кучу данных из прямой трансляции, когда условия выполняются. Затем этот кусок обрабатывается, пока поток постоянно контролируется. Обработка мучительно медленная, поэтому более одного события обработки может происходить за раз в зависимости от того, как часто/долго пользователь нажимает/удерживает кнопку для.
ex:

Код: Выделить всё

uint32_t start;
uint32_t end;

while(isLive){
//Stream management & evaluation...
//start, end populated as required.

if(...){
//A chunk of data is isolated from the main stream for processing
std::vector isolatedChunk;
isolatedChunk.resize(end - start);
memcpy(&isolatedChunk[0], &streamBuffer[start], (end - start) * sizeof(float))

//Start a thread to process the isolated chunk. (Takes 500-15,000ms depending on the data)
std::thread myThread(&MyClass::ProcessDataFunction, this, isolatedChunk);

//Fire & forget. The thread will handle any reporting/result.
myThread.detach();
}

//Main thread goes on...
}
Должен ли я просто создать глобальный список векторов, передаваемых в поток, чтобы избежать проблем с областью?>

Подробнее здесь: https://stackoverflow.com/questions/795 ... value-copy
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»