Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Нужно вывести процедуру в поток


Автор: Pavelbej 14.9.2008, 16:35
Здравствуйте!

Тут такие дела: 
Хочу експортировать данные из своей программы в базу данных. Для этого жму на батон и выполняю задание:
Код

procedure TfrImportExport.btImportExportClick(Sender: TObject);
begin
     Export_Data(...);
end;

Процедура Export_Data находится в другом модуле и выглядит ее код примерно так:
Код

procedure Export_Data(...)
begin
        ...
        while not Eof do
        begin
             ...
             if folder then
                  Export_Data(...); 
             ...
             Next;
        end;
        ...
end;

Как видно, эта процедура может вызывать сама себя сколь угодно раз (древовидная сруктура). В этом случае мне непонятно как пихнуть ее в поток. Подскажите архитектуру, схему того, как должно все выглядеть.

Автор: Poseidon 15.9.2008, 00:38
TThread вполне умеет поддерживать рекурсивный вызов. http://forum.vingrad.ru/forum/topic-60076.html.

Автор: CodeMonkey 15.9.2008, 07:49
http://delphikingdom.ru/asp/viewitem.asp?catalogid=1355 smile
Если же использовать классические потоки, то не совсем понятно, в чём именно у вас возникли затруднения.
Вы должны в btImportExportClick запустить поток, в Execute которого должен стоять вызов Export_Data(...); Всё. Рекурсия здесь как бы вовсе не при чём.
Или вы хотите вставить выполнение в потоке в саму Export_Data? Ну тогда достаточно проверять: если вы выполняетесь в главном потоке - то запускать её в другом потоке, нет - ничего не делать. Сделать это можно, например, так:

Код
if GetCurrentThreadId = MainThreadId then
  // Мы - в главном потоке

Автор: Pavelbej 15.9.2008, 12:26
Спасибо всем, оказалось я зря пугался.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)