2010-06-21 3 views

ответ

2

Вам необходимо знать многопоточность. вы можете начать с учебника в about.com

+0

thanx для ссылок ... его хороший jumpstart .. –

3

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

+0

+1 для "продвинутой темы". OP может даже не выполнять параллельное выполнение, но это то, что, как представляется, предлагается. –

7

Предполагая, что Delphi 2009 или выше, и с помощью OmniThreadLibrary:

uses OtlParallel; 

var 
    aRes: integer; 
    bRes: integer; 

begin 
    Parallel.Join(
    procedure begin 
     aRes := a(); 
    end, 
    procedure begin 
     bRes := b(); 
    end); 
end. 

Или для пуристов, которые не любят анонимные функции:

uses OtlParallel; 

var 
    aRes: integer; 
    bRes: integer; 

procedure CalcA; 
begin 
    aRes := a(); 
end; 

procedure CalcB; 
begin 
    bRes := b(); 
end; 

begin 
    Parallel.Join(CalcA, CalcB); 
end. 

(Это работа работа по то же самое, если CalcA и CalcB являются методами, а не обычными процедурами.)

Как указывали другие, поле многогранников ng программирование полна опасности. Убедитесь, что ваши две функции не изменяют одинаковые структуры, а не выводят данные в один и тот же пункт назначения и, прежде всего, что они не используют графический интерфейс каким-либо образом.

+0

Вы не имеете в виду ** не ** модификацию тех же структур? – afrazier

+0

@afrazier: Конечно! Спасибо за исправление. – gabr