Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.011 c
6-36326
Осирис
2002-10-17 13:47
2002.12.12
Примеры к Indy9


1-36274
antoniz
2002-12-02 14:07
2002.12.12
Люди подскажите плиз


1-36191
DNT
2002-11-30 14:14
2002.12.12
Помогите начинающему


3-36016
Infinity
2002-11-24 22:52
2002.12.12
Вопрос об индексе


1-36170
Bakch
2002-12-03 14:25
2002.12.12
Crystal Report




   Наверх