|
0 / 0 / 0
Регистрация: 22.09.2008
Сообщений: 10
|
|
Создание формы вторым потоком из ДЛЛ?22.09.2008, 13:40. Показов 4344. Ответов 18
Метки нет (Все метки)
Доброго времени суток.
Есть второстепенный поток. Туда подгружается библиотека. Есть ли возможность/способ создания формы этим потоком из этой библиотеки?
0
|
|
| 22.09.2008, 13:40 | |
|
Ответы с готовыми решениями:
18
Использование формы рабочим (вторым) потоком При перезапуске таймера он запускается вторым потоком
|
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
|
| 22.09.2008, 13:47 | |
|
Эм...ну так сделай в этой библиотеке функцию, создающую окно. Вызови.
0
|
|
|
0 / 0 / 0
Регистрация: 22.09.2008
Сообщений: 10
|
||
| 22.09.2008, 14:13 [ТС] | ||
|
Чтобы были более понятны обстоятельства проблемы: Существует проект на сибилдере, в проекте несколько второстепенных потоков. Один из потоков - консольный, туда подключен интерпретатор опенбейсик (ОБ). В ОБ подгружается библиотека с формой, которую собственно и надо вывести (желательно немодально), тут и начинаются проблемы. Добавлено через 14 минут 13 секунд Вот еще что... На одном из форумов ответили: "GUIовая часть VCL расчитанна на работу ТОЛЬКО из главного потока приложения, так что попытки создавать в ней что то из ниток обречены на провал с самого начала" Это действительно так?
0
|
||
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
||
| 22.09.2008, 14:24 | ||
|
0
|
||
|
0 / 0 / 0
Регистрация: 22.09.2008
Сообщений: 10
|
||
| 22.09.2008, 15:19 [ТС] | ||
![]() Хотелось бы аргументов, а еще лучше фактов. Вопрос здесь не о работе (потому как к вцл можно обращаться через синхронайз), а о возможности создания формы во второстепенном потоке в принципе.
0
|
||
|
|
|||||||
| 22.09.2008, 15:54 | |||||||
|
хотя вот такая конструкция вроде не глючит:
1
|
|||||||
|
0 / 0 / 0
Регистрация: 22.09.2008
Сообщений: 10
|
||
| 22.09.2008, 16:12 [ТС] | ||
|
Спасибо, попробую. Сообщение "канвас недоступен" пропало после отключения "Build with runtime packages" в свойствах проекта. Попробовал... Вторая форма выводится без заголовка и содержимого.
0
|
||
|
Почетный модератор
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
|
|
| 22.09.2008, 16:28 | |
|
так эту галку тебе в любом случае снимать надо будет, чтобы проект на тачках без билдера заработал...
0
|
|
|
0 / 0 / 0
Регистрация: 22.09.2008
Сообщений: 10
|
|
| 22.09.2008, 18:27 [ТС] | |
|
BCB help:
"... When using objects in the VCL or CLX, use the main thread to execute your code. Using the main thread ensures that the object does not indirectly access any memory that is also used by VCL or CLX objects in other threads. ... "
0
|
|
|
|
|||
| 23.09.2008, 09:16 | |||
|
ИМХО ничего страшного если ВЦЛ объекты в разных потоках будут создаваться и работать, главное чтоб потоки, пересекаясь между собой не вызывали не валидные указатели.
0
|
|||
|
0 / 0 / 0
Регистрация: 22.09.2008
Сообщений: 10
|
||
| 23.09.2008, 11:08 [ТС] | ||
|
"...When using objects in the VCL or CLX, use the main thread to execute your code..." Я понял это так, что "когда используете объекты в ВЦЛ или ЦЛХ, используйте главный поток для запуска вашего кода" (т.е. кода создания формы) С использованием синхронайза все более-менее прозрачно.
0
|
||
|
|
||||||||
| 23.09.2008, 11:21 | ||||||||
|
создается в дизайне Form2 с контролами и событиями на эти контролы (вобщем все как для обычного приложения, только в опциях проекта убираешь эту форму из автосоздаваемых в доступные) затем в потоке:
Не вижу причин не создавать ВЦЛ объекты в дочернем потоке при должной синхронизации .
0
|
||||||||
|
0 / 0 / 0
Регистрация: 22.09.2008
Сообщений: 10
|
||||||||
| 23.09.2008, 12:36 [ТС] | ||||||||
= No Effect
0
|
||||||||
|
|
||||||
| 23.09.2008, 13:48 | ||||||
0
|
||||||
|
0 / 0 / 0
Регистрация: 22.09.2008
Сообщений: 10
|
||
| 23.09.2008, 14:24 [ТС] | ||
|
Не работает в таком виде - форма выводится пустая. Хотя там и кнопки и едиты в дизайне. Может какие тонкости есть?
0
|
||
|
|
|
| 23.09.2008, 14:57 | |
|
а справка по-своему права: все дело в том что при вызове конструктора TForm2(Owner) сначала вызываются родительские конструкторы, начиная с TObject, и заканчивая TForm, таким образом, все объекты, которые в дизайне накиданы на форму в конструкторе TForm2 уже созданы и требуют Canvas для отрисовки, а т.к. мы это дело проворачиваем в отдельном потоке, то канва не успевает еще отриваться, поэтому эксепшн возникает.
Выходом будет либо до ShowModal пробедаться по всем объектам и каким то образом указать канву, либо такую операцию проделать в конструкторе TForm2
0
|
|
|
0 / 0 / 0
Регистрация: 22.09.2008
Сообщений: 10
|
|
| 23.09.2008, 17:02 [ТС] | |
|
0
|
|
|
0 / 0 / 0
Регистрация: 22.09.2008
Сообщений: 10
|
||
| 23.09.2008, 18:20 [ТС] | ||
|
Думаю нет смысла продолжать. На 3/5 форумов подтвердили: "GUIовая часть VCL расчитанна на работу ТОЛЬКО из главного потока приложения, так что попытки создавать в ней что то из ниток обречены на провал с самого начала"
0
|
||
| 23.09.2008, 18:20 | |
|
Помогаю со студенческими работами здесь
19
C# Создание и использование длл
Запуск формы отдельным потоком Фокус на TextBox внутри формы отдельным потоком Форма с фоновым потоком. Ошибка при закрытии формы Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи. . .
|
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений.
9TO2GP2bpX4
a42b81fb172ffc12ca589c7898261ccb/
https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/
Слева синяя линия -. . .
|
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. .
Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
|
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла:
Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
|
|
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-text-sdl3-c. zip
finish-text-sdl3-cpp. zip
|
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
|
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo
Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло.
Но на выплатах по больничным это. . .
|
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью в конфигурации КА2. Данные берутся из регистра сведений, по. . .
|