|
0 / 0 / 1
Регистрация: 03.01.2014
Сообщений: 52
|
||||||
Многопоточность в делфи18.06.2014, 01:45. Показов 5621. Ответов 74
Метки нет (Все метки)
Здравствуйте, нужны советы и помощь.
Суть задачи состоит в том что: Есть компонент ListView. Нужно сделать так что бы каждая строка была отдельным потоком, проще говоря, строка для пользователя была доступом в поток, и при её нажатии сбоку в компоненте Edit вывелась переменная того класса который в потоке, к примеру. Подсказали сделать TList и в нём держать указатели на поток и при выборе какого то элемента в ListView брать из TList поток с тем же индексом. В принципе проблем нет. Но я понял что, я не смогу управлять потоком, т.е. мне нужно будет изменить переменную в том классе добавить элемент в массив и т.д.( Естественно для всего этого будут свои методы), а я этого не смогу. Именно нужно что бы в потоке хранился класс, так как класс будет таким себе клиентом написанным на сокетах и будет общаться с сервером, будут главные процедуры класса к которым мне нужен доступ, как я писал уже выше. Так вот как такое реализовать, возможно у кого то есть решение, или мысли, прошу помощи у Вас) Спасибо Добавлено через 33 минуты
Вроде поток создаю. Вроде доступ ко всему что нужно есть. Прошу вашей помощи. Добавлено через 4 часа 9 минут Что будет если я в TList добавлять указатели на экземпляры класса(клас в себе содержит клиент-сокет и обрабатывает сойдинение) по сути оно должно работать.??
0
|
||||||
| 18.06.2014, 01:45 | |
|
Ответы с готовыми решениями:
74
Делфи и многопоточность Как в Делфи выполнить код, написанный на Делфи, например в поле ввода? У меня стоит Делфи 5, возможно еще поставить и Делфи 7, или будут проблемы?! |
|
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
|
|
| 19.06.2014, 23:17 | |
|
0
|
|
|
0 / 0 / 1
Регистрация: 03.01.2014
Сообщений: 52
|
||
| 19.06.2014, 23:32 [ТС] | ||
|
opcode : cuint; packet_len : cuint; server_key : Octets; cuint - тот самый тип. Octets - это хекс строка запакована так: ( 0xFFEEAA9F - сам хекс код? а перед ним идёт длинна запакованная с помощью cuint)
0
|
||
|
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
|
||
| 19.06.2014, 23:55 | ||
|
Добавлено через 6 минут Совет: не уподобляйся приснопамятному Остапу Бендеру - "мне нужно все сразу") Мухи отдельно, а котлеты отдельно) Взялся за организацию потоков ? Ну так и доведи сначала эту кухню до ума ! Только потом будет смысл взяться за транспортную логику сокета, реализацию протокола инф.обмена, "розпаковку" и пр. не относящуюся собственно к потокам лабуду) При таких скромных познаниях переварить эту кашу целиком и разом тебе не по силам.
0
|
||
|
0 / 0 / 1
Регистрация: 03.01.2014
Сообщений: 52
|
||
| 20.06.2014, 00:03 [ТС] | ||
|
Добавлено через 1 минуту Уподобляться приходится, где я еще найду такого человека как Вы) Который все розкажет и покажет.
0
|
||
|
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
|
||
| 20.06.2014, 00:12 | ||
|
О каком классе может идти речь, если до сих пор не ясно что это за "тот самы тип" ?)
0
|
||
|
0 / 0 / 1
Регистрация: 03.01.2014
Сообщений: 52
|
|||
| 20.06.2014, 00:20 [ТС] | |||
|
К примеру если у нас есть массив байт. и структура пакета, вызывать функцию, которая бы парсила эти байты и розбивала их по структуре в свои места. И реверс данной функции, которая бы принимала структуру(где все поля заполнены) и возвращала нам массив байт.
0
|
|||
|
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
|
||||||
| 20.06.2014, 00:44 | ||||||
|
Мдя, тяжелый случай)
Ладно, попробуем на огурцах) То есть ты желаешь при приеме сообщения от сервера получить из сокета последовательность байт заранее неизвестной длины (тот самый cuint), представить эту последовательность в виде дельфийских данных типа
0
|
||||||
|
0 / 0 / 1
Регистрация: 03.01.2014
Сообщений: 52
|
|||||||
| 20.06.2014, 00:59 [ТС] | |||||||
|
Вот чего я добиваюсь. Сервер отправил нам сообщение, мы его записали в переменную типа
Читаем номер пакета, и его длину, по номеру находим структуру по длине читаем наш пакет до конца. Отправляем наш пакет и структуру в универсальную функцию(если такое возможно) которая аргументами принимает массив байт и саму сруктуру. А дальше с помощью номера находим и функцию/процедуру которая обработает уже полученную структуру и ответит серверу. Есть условие Если после получения длинны пакета оказалось что за ним следом шел еще и второй пакет мы режем массив на два пакета и по очереди обрабатываем их способом выше. Можно конечно написать две функции toCuint и unCuint сделать большой свитч и для каждого пакета свою функцию парсинга, но это я думаю большая ошибка т.к. можно сделать как то красивей и аккуратней. На шарпе для поиска нужной структуры к примеру можно использовать рефлексию, по первому байту искать класс-структуру и вызывать функцию записи полученных данных в этот класс, а потом на основе этого отвечать серверу. Добавлено через 1 минуту На основе написанного понял что сморозил фигню про создание своего типа данных, т.к. нужно все равно знать номер пакета и читать его нужно будет функцией.
0
|
|||||||
|
пофигист широкого профиля
4770 / 3207 / 862
Регистрация: 15.07.2013
Сообщений: 18,615
|
|
| 20.06.2014, 02:03 | |
|
0
|
|
|
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
|
|
| 20.06.2014, 09:12 | |
|
0
|
|
|
0 / 0 / 1
Регистрация: 03.01.2014
Сообщений: 52
|
|||||||
| 20.06.2014, 15:19 [ТС] | |||||||
0
|
|||||||
|
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
|
|||||||||
| 20.06.2014, 15:56 | |||||||||
|
Это вовсе не одно и тоже. Кроме этого в справке к ф-ции ReceiveLength черным по белому сказано
А вот сколько она в реальности прочитала - об этом скажет результат, возвращенный функцией ReceiveBuf, который ты никак не анализируешь, бездумно копируя логику тех самых горе-подсказчиков) 1. Пакет - это сообщение. 2. Длины сообщения ты не знаешь, и ReceiveLength в этом не помощник, ибо работает она на уровне транспортируемых данных, а не на уровне прикладных сообщений. 3. Прочитать целиком отдельное сообщение, не зная заранее его длины, невозможно.
0
|
|||||||||
|
0 / 0 / 1
Регистрация: 03.01.2014
Сообщений: 52
|
||
| 20.06.2014, 16:24 [ТС] | ||
|
Сейчас спрошу у знатоков в этом деле) Тогда отвечу вам корректно.
0
|
||
|
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
|
||
| 20.06.2014, 16:37 | ||
|
0
|
||
|
0 / 0 / 1
Регистрация: 03.01.2014
Сообщений: 52
|
||
| 20.06.2014, 23:41 [ТС] | ||
|
Добавлено через 4 часа 2 минуты Уточнил, уже сам знаю как организовать получение полного пакета. Подскажите как лучше, правильно, и самое главное что бы быстро организовать логику, чтоб не плодить большой свитч и много функций. Добавлено через 29 минут И ещё, тот цикл который создан в функции Execute, нужно остановить?
0
|
||
| 20.06.2014, 23:41 | |
|
Здр, пожалуйста попробуйте запутсить .exe написанное на делфи 10 у себя, те у кого делфи 7
То что работает в Делфи 7 - не работает в Делфи 2010 Многопоточность Многопоточность Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
|
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
|
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ
Основная суть и тезисы по измерениям:
0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема.
Объект не может перемещаться в 0D.
1D (Первое измерение):. . .
|