Форум: "Основная";
Текущий архив: 2002.12.12;
Скачать: [xml.tar.bz2];
ВнизМногопоточность..... Найти похожие ветки
← →
---- (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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.004 c