Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
0 / 0 / 0
Регистрация: 29.07.2016
Сообщений: 17

Работа Tthread Queue с VCL

29.07.2016, 18:21. Показов 3253. Ответов 8

Студворк — интернет-сервис помощи студентам
Приветствую уважаемых форумчан и прошу помощи в следующем вопросе:

Имеется поток TTthread, который работает с аппаратной частью.
Эта аппаратная часть критична к задержкам опроса.
Требуется организовать обмен данными с GUI.
По рекомендации Embarcadero пробовал использовать для этой
цели Synchronize, но работа с аппаратной частью тогда нарушалась
из-за задержек в Synchronize.
Что бы не происходило приостановок потока попробовал Queue и тут
началось необъяснимое поведение
Embarcadero не разрешает использовать Queue для работы
с VCL, хотя мне бы он подошел.

Какие решения вы бы посоветовали использовать в данном случае для
обмена данными потока с GUI?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.07.2016, 18:21
Ответы с готовыми решениями:

Множественное наследование VCL& экспорт TThread
Здравствуйте. 1) Кто-нибудь пробовал экспортировать переменные типа TThread? extern TNewThread *NewThread; вызывает...

Алгоритмы синхронизации TThread и VCL
Здравствуйте форумчане. Подскажите алгоритмы синхронизации потока с формой. А может методы другие. Суть вопроса. Как синхронизировать...

Работа с потоками TThread
Работал с потоками по аналонии с Дэльфи. В Лазарусе компилируется нормально, но выполнение программы прекращается при попытке создать...

8
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
31.07.2016, 21:18
TIdNotify

Добавлено через 3 часа 6 минут
TIdNotify, создание и удаление объекта этого класса
2
0 / 0 / 0
Регистрация: 29.07.2016
Сообщений: 17
01.08.2016, 19:18  [ТС]
Avazart,
TIdNotify разве не только для TIdThreadComponent?

И можно ли, например, использовать TIdNotify для передачи данных потоку, а не только форме?
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
01.08.2016, 22:51
Цитата Сообщение от Kopna Посмотреть сообщение
TIdNotify разве не только для TIdThreadComponent?
С чего вы это взяли?
0
0 / 0 / 0
Регистрация: 29.07.2016
Сообщений: 17
02.08.2016, 17:14  [ТС]
С того, что в одной библиотеке

Добавлено через 17 часов 27 минут
Вроде как с передачей данных от потока к VCL я разобрался.
Может кому будет полезно, получилась так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include <System.hpp>
 
enum _DummyType{};      // Parameter used as default
 
template <typename INTF, // Interface with Invoke
          typename F,    // Functor type
          typename R,    // Return type
          typename P1 = _DummyType,  // Param #1
          typename P2 = _DummyType,  // Param #2
          typename P3 = _DummyType,  // Param #3
          typename P4 = _DummyType,  // Param #4
          typename P5 = _DummyType>  // Param #5
class TMethodRef : public TCppInterfacedObject<INTF>
{
private:
  F callback;
public:
  TMethodRef(F _callback) : callback(_callback) {}
  INTFOBJECT_IMPL_IUNKNOWN(TInterfacedObject);
 
  R __fastcall Invoke() {
    return callback();
  }
  R __fastcall Invoke(P1 p1) {
    return callback(p1);
  }
  R __fastcall Invoke(P1 p1, P2 p2) {
    return callback(p1, p2);
  }
  R __fastcall Invoke(P1 p1, P2 p2, P3 p3) {
    return callback(p1, p2, p3);
  }
  R __fastcall Invoke(P1 p1, P2 p2, P3 p3, P4 p4) {
    return callback(p1, p2, p3, p4);
  }
  R __fastcall Invoke(P1 p1, P2 p2, P3 p3, P4 p4, P5 p5) {
    return callback(p1, p2, p3, p4, p5);
  }
};
 
struct RadioPingNotify {
  RadioPingNotify(TMainFrm *_form, ping_info_t _pi) : form(_form), pi(_pi) { }
  void operator()() {
      form->RadioPingReceived(pi);
  }
  TMainFrm *form;
  ping_info_t pi;
};
 
typedef TMethodRef<Classes::TThreadProcedure,
                   RadioPingNotify,
                   void> PingMethRef;
 
#define PING_NOTIFY(f, p) Queue(Classes::_di_TThreadProcedure(new PingMethRef(RadioPingNotify((f), (p)))))
 
...
А вот как быть с управляющими запросами от GUI к потоку пока не ясно...
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
02.08.2016, 19:04
В духе мы не ищем легких путей )))
TIdNotify чем не угодил?
0
0 / 0 / 0
Регистрация: 29.07.2016
Сообщений: 17
03.08.2016, 17:02  [ТС]
Не угодил, поскольку я не смог найти на него документации и не достаточно полно понимаю его логику работы.
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
04.08.2016, 14:04
Цитата Сообщение от Kopna Посмотреть сообщение
Не угодил, поскольку я не смог найти на него документации и не достаточно полно понимаю его логику работы.
А зачем там дока, я ссылку на пример привел из которого и так можно все понять.
0
UeArtemis
18 / 18 / 3
Регистрация: 23.09.2011
Сообщений: 205
05.08.2016, 09:00
Я лично, когда из такого потока нужно было открывать модальные окна, кидал сообщение главной форме, а там сразу же делал ReplyMessage, чтобы поток не стоял вместе с формой.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.08.2016, 09:00
Помогаю со студенческими работами здесь

Работа с потоками (TThread) + реализация
При нажатию на кнопку код должен выполнятся в отдельном потоке, чтобы избежать зависания GUI 3 команды проигрывающие разные звуки по...

Работа с queue
Не буду темнить, нашол этот код здесь на форуме. Помогите его модифицировать, щобы можна было вводить не только числа а и строчные...

Разница между finalization queue и freachable queue
Всем привет, все как-то никак не могу понять, в чем разница

Разница между queue.synchronized и concurrent queue
По сути 2 коллекции потокобезопасные, что лучше использовать? Queue que = Queue.Synchronized(new Queue()); // или...

Работа с наборами Queue и Stack
Пожалуйста, помогите закончить Сгенерировать массив символов (тип char), тип символов - Заглавная латиница, размер массива определить...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru