Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Delphi and Threads

42K
22 января 2009 года
Vit_access
13 / / 22.01.2009
Почему когда я создаю TThread в библиотеке (dll) он не работает, а работает если там есть форма и эта форма показывается как модальная?

СПАСИБО ЗАРАНИЕ!
6
23 января 2009 года
George
4.1K / / 05.01.2007
собственно с потоками никогда особо не работал, но вот что нашел:
Цитата:

http://msdn.microsoft.com/en-us/library/bb202727.aspx
During process startup and DLL initialization routines, threads can be created, but they do not begin execution until DLL initialization is done for the process.
In a process, only one thread at a time can be in a DLL initialization or detach routine.

42K
23 января 2009 года
Vit_access
13 / / 22.01.2009
ммм понятно значит в dll может быть только один поток...
У меня ещё один вопрос:
Как будет делать multiselect как прорисовку прямоугольников, что означает, что этот объект выделен либо создать визуальный объект, который покрывает выделяемый элемент?
6
23 января 2009 года
George
4.1K / / 05.01.2007
Цитата: Vit_access

Как будет делать multiselect как прорисовку прямоугольников, что означает, что этот объект выделен либо создать визуальный объект, который покрывает выделяемый элемент?


а теперь по русски пишем, че надо сделать, че делаем и чем не устраивает результат. а то я ниче не понял. =)

42K
23 января 2009 года
Vit_access
13 / / 22.01.2009
sorry, ща прочитал и сам не понял чё написал...
Кароче я делаю прогу в которой есть редактор стилей.
там у меня есть множественное выделение элементов. Я это зделал так:
создаю визуальный объект, который покрывает выделяемый элемент,
может правильней было бы нарисовать вокруг элемента прямоугольник(тогда как делать изменение размеров выделяемого элемента)...?
6
23 января 2009 года
George
4.1K / / 05.01.2007
а что за элементы?
Цитата:
может правильней было бы нарисовать вокруг элемента прямоугольник(тогда как делать изменение размеров выделяемого элемента)...?

не понял.

261
23 января 2009 года
ahilles
1.5K / / 03.11.2005
Vit_access, давай начнём сначала , как ты запускаешь поток?
42K
23 января 2009 года
Vit_access
13 / / 22.01.2009
Цитата:
не понял

VCL элементы в делфи они создаются динамически

6
23 января 2009 года
George
4.1K / / 05.01.2007
ты код запуска потока (и может создания) выложи. типа тред.екзекут. :)
303
23 января 2009 года
makbeth
1.0K / / 25.11.2004
Vit_Access[\b], причем здесь DLL и потоки? Эти понятия в общем-то не связаны абсолютно. По ссылке выше сказано, что при загрузке/выгрузке DLL в адресное пространство процесса, только один из его потоков может выполнять специальные инициализирующие функции DLL одновременно. Скорее всего проблема в работе связки VCL программы и Delphi. Дело в том, что сам класс TThread очень сильно завязан с TApplication (синхронизация с VCL контролами, к примеру), а поскольку в DLL свой экземпляр TApplication (если подключены необходимые модули) то возможно тут и возникает затык. Возможно я неправ, тут действительно надо смотреть код...
42K
23 января 2009 года
Vit_access
13 / / 22.01.2009
Цитата:
Vit_access, давай начнём сначала , как ты запускаешь поток?


Вот так:

[INDENT]type
test = class(TThread)
private[INDENT] i:integer;[/INDENT] procedure DoIt;
protected[INDENT] procedure Execute; override;[/INDENT] end;

procedure test.Execute;
begin[INDENT] FreeOnTerminate:=True;
i:=1;
repeat[/INDENT][INDENT][INDENT] Synchronize(DoIt);
inc(i);
if terminated then exit;
sleep(50);[/INDENT][/INDENT][INDENT] until False;[/INDENT]end;

procedure test.DoIt;
begin[INDENT] ShowMessage(IntToStr(i));
[/INDENT]end;

........................
var[INDENT] Test:Test;
[/INDENT] Test:=Test.Create(True);
Test.Resume;[/INDENT]

6
23 января 2009 года
George
4.1K / / 05.01.2007
Цитата: makbeth
Vit_Access[\b], причем здесь DLL и потоки? Эти понятия в общем-то не связаны абсолютно. По ссылке выше сказано, что при загрузке/выгрузке DLL в адресное пространство процесса, только один из его потоков может выполнять специальные инициализирующие функции DLL одновременно. Скорее всего проблема в работе связки VCL программы и Delphi. Дело в том, что сам класс TThread очень сильно завязан с TApplication (синхронизация с VCL контролами, к примеру), а поскольку в DLL свой экземпляр TApplication (если подключены необходимые модули) то возможно тут и возникает затык. Возможно я неправ, тут действительно надо смотреть код...



может тогда попробовать билд с рантайм пакетами? и отладчиком пошукать?

42K
23 января 2009 года
Vit_access
13 / / 22.01.2009
Спасибо за помощь....
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог