69 / 62 / 13
Регистрация: 10.01.2012
Сообщений: 508
|
||||||||||||||||
1 | ||||||||||||||||
Получение данных структуры из другого потока24.02.2020, 21:19. Показов 936. Ответов 11
Как передать/получить данные структуры в другом потоке (клиентского подключения к серверу) не передавая структуру, а используя указатель на нее ?
Описание : Имеются несколько структур tcp сервера на Linux, которые заполняются до подключения клиентов, но их данные должны быть доступны всем и в любой момент. Цепочка событий: |объявление|->инициализация|->|запуск рабочего процесса слушателя сокета|->|ексепт коннекта|->|образование клиентского потока|->|прием структуры по extern|->| извлечение данных|
ПРОБЛЕМА: Искать в них (в потоке клиента) получается, просматривать тоже получается, а вот вывести данные (типа так
api_chan = Всегда пусто (nil). Суть вопроса Как правильно забрать/передать хранимые в структуре данные в потоке клиентского подключения ?
0
|
24.02.2020, 21:19 | |
Ответы с готовыми решениями:
11
Получение потоком GUI данных из другого потока Получение доступа к форме из другого потока Получение состояния Textbox из другого потока Получение доступа к функциям диалога из другого потока (mfc) |
25.02.2020, 09:10 | 2 |
0
|
69 / 62 / 13
Регистрация: 10.01.2012
Сообщений: 508
|
|
25.02.2020, 10:43 [ТС] | 3 |
Шаренная память хороша для fork() (лучше даже, наверно не существует), но у меня thread
0
|
25.02.2020, 15:50 | 4 |
Это что за функция, откуда? Если она возвращает NULL значит где-то была ошибка, которая и скажет что именно ей не нравится. Просто надо обрабатывать ошибки, а не гадать почему у меня NULL.
Если всё в одном многопоточном приложении - просто выделяем память и синхронизируем потоки через мютексы.
0
|
69 / 62 / 13
Регистрация: 10.01.2012
Сообщений: 508
|
|
25.02.2020, 22:20 [ТС] | 5 |
Она возврашает не NULL, а nil. и дебагер, в пояснениях сообщает что память по этому адресу недоступна, однако, функция как ListStructShowAll(main_api_idsdevises); выводит на экран все записанные var & val.
Если же все это создается и извлекается в одном потоке, тогда проблем нет. По факту: В другом потоке читается, но по ссылке не копируется.
0
|
26.02.2020, 09:09 | 6 |
Не все дебаггеры адекватно могут в мультитрединг, тут еще отсюда может быть проблема. А так, фауст все верно говорит. Ну и нужно больше кода
0
|
26.02.2020, 15:56 | 7 |
0
|
69 / 62 / 13
Регистрация: 10.01.2012
Сообщений: 508
|
|||||||||||
27.02.2020, 20:18 [ТС] | 8 | ||||||||||
0
|
69 / 62 / 13
Регистрация: 10.01.2012
Сообщений: 508
|
|||||||||||||||||||||
27.02.2020, 22:11 [ТС] | 10 | ||||||||||||||||||||
Ага.
Это я ее переименовол для форума, чтоб понятнее было что она делает, а сам запутался Исправляюсь, выкладываю оригиналы.
0
|
28.02.2020, 18:07 | 11 |
Ну тут никаких системных вызовов не вижу, значит ошибка в логике, например в ListStructsFind
Похожее поведение и в VarValFind , хотя не видя всего проекта трудно судить о логике частей...
0
|
69 / 62 / 13
Регистрация: 10.01.2012
Сообщений: 508
|
|
29.02.2020, 13:08 [ТС] | 12 |
Подставил костыль: вкидываю всю структуру в новый поток. Но это же не по феншую
0
|
29.02.2020, 13:08 | |
29.02.2020, 13:08 | |
Помогаю со студенческими работами здесь
12
Вызов функции другого потока и получение ответа с наименьшим кол-вом строк кода [QueuedConnection] Получение данных с потока Запись данных в Label из другого потока Передача данных в textbox из другого потока Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |