Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.04.2009, 17:44   #1
delphin100
Он лайн
Форумчанин
 
Аватар для delphin100
 
Регистрация: 26.09.2007
Сообщений: 173
Восклицание Псевдопараллельное выполнение процедур (Потоки)

Здравствуйте!
В поиске я вроде ничего подобного не нашёл (искал работу с потоками но по нужной проблеме не помогло).
В общем надо чтоб 2 процедуры (или просто куски кода не важно)
выполнялись вместе так как одна точно знаю работает 3-5 секунд а вторая быстро.
При этом программу пишу без формы (а именно прям в Project.dpr) и всё что я находил про потоки ничего не помогло.
Подскажите как обойти данную проблему при этом если важно то каждай процедура должна выполняться как в таймере раньше было while true do но когда вторая появилась от задержки выполнения первой надо изавляться.
Заранее всем спасибо.
delphin100 вне форума Ответить с цитированием
Старый 10.04.2009, 18:12   #2
Антон Ю.Б.
Форумчанин
 
Регистрация: 03.01.2009
Сообщений: 116
По умолчанию

Вопрос не очень понятен. "Выполнялись" в смысле "жили примерно одно время"? Так как если речь о логике выполнения, то кроме Вас ее никто не знает. Насчет жизни одно время - что мешает в основном условии цикла Execute (while not terminated) проверять что-то связанное со вторым потоком?

Посмотрите BMDThread еще - там есть возможности синхронизации потоков через общий менеджер.
Антон Ю.Б. вне форума Ответить с цитированием
Старый 10.04.2009, 18:23   #3
delphin100
Он лайн
Форумчанин
 
Аватар для delphin100
 
Регистрация: 26.09.2007
Сообщений: 173
По умолчанию

Из последнего я не понял сути. напишите код того что Вы предложили. На чёт того как они должный выполняться. То расскажу по подробнее есть 2 процедуры, если запускать из подряд тогда вторая будет выполняться редко то есть будет так
procedure1 {5 сек}
procedure2 {1 сек}
получается что вторая запускается раз в 6 секунд а первая нормально работает мне надо чтоб вторая выполнялась независимо от первой то есть постоянно ( while true do грубо) а первая со своим циклом
delphin100 вне форума Ответить с цитированием
Старый 10.04.2009, 19:27   #4
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Код:
program Project1;

{$APPTYPE CONSOLE}

uses
  Windows, SysUtils;

var threads: array[0..1] of THandle;
    tid1, tid2: cardinal;
    cs: TRTLCriticalSection;

Procedure Proc1(); stdcall;
var i:integer;
begin
  Repeat
    sleep(1000);

    // доступ из потоков к общим ресурсам (консоль, переменные...)
    // выполняем только в критической секции!
    EnterCriticalSection(cs);
    Writeln('Proc 1');
    LeaveCriticalSection(cs);

    inc(i);
  until i>9;
end;

Procedure Proc2(); stdcall;
var i:integer;
begin
  Repeat
    sleep(5000);

    EnterCriticalSection(cs);
    Writeln('----------- Proc 2');
    LeaveCriticalSection(cs);

    inc(i);
  Until i>1;
end;

begin
  // создаём критическую секцию
  InitializeCriticalSection(cs);

  // 2 потока
  threads[0] := CreateThread(nil, 0, @Proc1, nil, 0, tid1);
  threads[1] := CreateThread(nil, 0, @Proc2, nil, 0, tid2);

  // ждём завершения обеих потоков (до посинения)
  WaitForMultipleObjects(2, @threads, true, INFINITE);

  // прибираем за собой
  CloseHandle(threads[0]);
  CloseHandle(threads[1]);
  DeleteCriticalSection(cs);

  Writeln('The end');
  Readln;
end.
Можно заюзать TThread, но я что-то с ним не дружу.
пыщь
JTG вне форума Ответить с цитированием
Старый 10.04.2009, 20:16   #5
delphin100
Он лайн
Форумчанин
 
Аватар для delphin100
 
Регистрация: 26.09.2007
Сообщений: 173
По умолчанию

огромное спасибо вроде это то что надо сейчас проверю
delphin100 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Процессы и потоки ilham Win Api 10 17.12.2008 11:03
Потоки AidarBik Win Api 2 04.08.2008 10:00
Потоки в Delphi frai Общие вопросы Delphi 4 13.01.2008 03:39
Потоки в С Raptor Помощь студентам 1 07.01.2008 21:12