170 похожих чатов

Доброго времени суток. Я из главной программы в качестве отдельного

процесса вызываю еще одну программу. И мне необходимо передать в дочерний процесс cv::Mat. Каким образом это возможно реализовать? Я думал, что возможно передать указатель на начало нужного куска памяти, его ширина-высота и собрать в дочернем процессе новый объект с этими вводными.

25 ответов

16 просмотров

для общения между процессами сериализация потребуется почти без вариантов. потоками никак не разрулить?

Уточните еще вашу ОС

Ivan-Foshin Автор вопроса

ubuntu

shared memory тебе в помощь

Viktor Chyzhdzenka
shared memory тебе в помощь

В разделяемых процессах лучше использовать не общую виртуальную память, а сокеты. На loopback интерфейс все будет достаточно быстро приходить/уходить

Ivan Foshin
ubuntu

Если только fork, тогда можно передать указатель, примерно так, как вы написали. Если fork + exec, то shared memory, как подсказали выше

Не совсем понял, но насколько я понял, тебе надо передать из одной программы объект в другую программу. А другая эта программа сама не сумеет построить требуемый объект? Тебе нужно по сути ведь той другой программе передать не сам конкретный объект, а объект, наполненный какими то данными, так ведь. Значит тебе надо той программе просто передать информацию, какими данными наполнить объект. То есть та программа сама создаст объект, тебе нужно ей только передать информацию как этот объект наполнить. В идеале, если сам объект умеет сам себя строить, допустим он имеет какой то конструктор, при вызове которого, объект создается с требуемым наполнением. Тогда той программе ты просто не передаешь готовый объект, а всего лишь передаешь информацию какой конструктор вызвать, она тогда сама сможет создать объект, а конструктор наполнит данными.

Ivan-Foshin Автор вопроса
The Pressbraker
Не совсем понял, но насколько я понял, тебе надо п...

я использую библиотеку, которая требуется для обработки изображений. Я из нескольких изображений собираю одно большое, нарезаю по кусочками и хочу обрабатывать несколько штук парралельно, но библиотека позволяет создавать только один объект обработки в процессе, независимо от того, сколько потоков существует, и буду ли я создавать объект обработки в каждом потоке отдельно - об этом пишут сами авторы либы. Я решил обойти это ограничение путем создания дочерних процессов и в каждый дочерний отправлять тот кусочек, который нужно обработать. Но как ненакладно по ресурсам отправить? - вопрос еще открытый

Ivan Foshin
я использую библиотеку, которая требуется для обра...

процесс синтеза этой информации в виде, пригодном для передачи по каналу, называется сериализацией, обратный - десериализацией :) это уже обсудили

Ivan Foshin
я использую библиотеку, которая требуется для обра...

а в документации к cv не указаны технические причины, по которым так сделано?

Ivan-Foshin Автор вопроса
Ivan Sokolov
процесс синтеза этой информации в виде, пригодном ...

с этим не спорю, осталось устранить последнее препятсвие - собственные пробелы в знаниях

Ivan-Foshin Автор вопроса
Ivan Sokolov
а в документации к cv не указаны технические причи...

как они говорят, сделали её потокобезопасной, чтобы объектом обработки мог пользоваться только один поток

потому что.

а что такое "объект обработки"? может вам их просто несколько нужно? (очень мало работал с CV, простите)

Ivan Foshin
я использую библиотеку, которая требуется для обра...

Ну создай по обработчику в каждом потоке и каждому отдай свой кусок матрицы. Насколько память мне позволяет в opencv это возможно, главное матрицу не изменяй в этих потоках.

Ivan-Foshin Автор вопроса
Ivan Sokolov
а что такое "объект обработки"? может вам их прост...

cv тут по сути нужно как обертка для работы с изображениями. Я получаю видеопоток из нескольких источников покадрово, после чего из них делаю общее полотно (несколько камер стоят рядом друг с другом) и согласно ТЗ отрезаю от него по нужным координатам кусочки и отправляю на обработку в zxing. А в одном процессе zxing можно обрабатывать только одно изображение

Ivan-Foshin Автор вопроса
Viktor Chyzhdzenka
Ну создай по обработчику в каждом потоке и каждому...

Мы с Вами такой вариант обсуждали и пробовали - он не работает

Ivan Foshin
Мы с Вами такой вариант обсуждали и пробовали - он...

Ну тогда только через процессы и разделяемую память. Если входной объект корежить не будешь, то с разделяемой памятью всё просто. Если будешь, то ...

Ivan-Foshin Автор вопроса
Viktor Chyzhdzenka
Ну тогда только через процессы и разделяемую памят...

нет, входной объект не буду корежить. Как раз ищу информацию по использованию с fork-exec

Ivan-Foshin Автор вопроса
Ivan Foshin
cv тут по сути нужно как обертка для работы с изоб...

А где там в коде такое ограничение на одно изображение?

Alexey Petrunyaka
А где там в коде такое ограничение на одно изображ...

У него там юзаемые сторонние либы с глобальным локом на горы глобальных внутренних переменных и могут только в один поток в одном процессе.

Viktor Chyzhdzenka
У него там юзаемые сторонние либы с глобальным лок...

Так я уже эту стороннюю либу нашёл и смотрю её код, поэтому и спрашиваю

Alexey Petrunyaka
Так я уже эту стороннюю либу нашёл и смотрю её код...

А я ему поверил. При запуске в некольких потоках, вызовы выстраюваются в цепочку линейную.

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
2
Карта сайта