Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.12.12;
Скачать: CL | DM;

Вниз

Многопоточность.....   Найти похожие ветки 

 
----   (2002-11-29 18:02) [0]

Есть ДЛЛ. В каждой ДЛЛ лежит форма. Запускаю из главного приложения эти формы. Все нормально работает...до тех пор пока в какой-то форме не начну делать сложные вычисления - тогда все приложение виснет. Брать эти вычисления в отдельной поток - не выход, т.к. исходников к ДЛЛ нет.

Как можно запустить форму из ДЛЛ в отдельном потоке, чтобы не было таких глюков?


 
Cobalt ©   (2002-11-30 01:03) [1]

"запустить форму из ДЛЛ в отдельном потоке" вообще нельзя, т.к. VCL не поддерживает многопоточности (насколько я знаю, до сих пор) Попроси автора ДЛЛ-лок дать тебе исходники, или пусть он хоть вставит туда ProcessMessages.


 
Ihor Osov'yak ©   (2002-11-30 12:18) [2]

2 Cobalt © (30.11.02 01:03)

> "запустить форму из ДЛЛ в отдельном потоке" вообще
можно (в смысле загрузить), независимо от того, на чем она написана, и невзирая на той факт, что VCL немного плохо
дружит с многопоточностью.

Нужно только юзать динамическую загрузку dll и грузить ее уже в рабочем потоке. Еще вариант - если dll написана с расчета работы в многопоточной апликации и она чисто "вычислительного типа", то можно обойтись только вызовом функций dll в отдельном потоке (а длл грузить стандартно).

Еще - если длл написана с рассчета на работу в одном потоке и причем главном (пример - dll с VCL контролами + юзание Application.ProcessMessagess) - то при выносе такой длл в отдельный поток можно нарваться на кучу неприятностей (долго рассказывать).


Зы. Упреждая возражения со стороны Cobalt скажу, что решения с использованием загрузки длл в отдельном потоке использовал не единыжды и успешно...


 
----   (2002-12-02 10:57) [3]

У меня есть менеджер форм (ехе-файл), который работает с формами из dll. Мне нужно загрузить 2 формы (для простоты 2...а вообще больше) из 2 разных dll. Потом я между этими окнами могу свободно переключаться. Но если одна из форм по каким-то причинам виснет(например, длинные вычисления без потоков, ProcessMessagess, либо еще чего), то виснит все приложение. Я бы хотел иметь возможность удалить эту dll (форму) и продолжить работу с остальными окнами.

Как вот ЧТО можно сделать...и главное КАК это можно сделать?



Страницы: 1 вся ветка

Текущий архив: 2002.12.12;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.017 c
3-36052
b_baranov
2002-11-25 17:48
2002.12.12
Field description в Interbase


1-36167
dumb
2002-12-04 01:09
2002.12.12
C++ 2 Delphi


14-36378
Skier
2002-11-21 12:23
2002.12.12
Уважаемые любители спорта !


1-36126
Keymaster
2002-12-01 20:47
2002.12.12
Глюк с INI


1-36088
SkyN
2002-12-02 11:14
2002.12.12
Как организавать паузу, чтобы небыло эффекта