Главная Новые темы Список тем Задать вопрос Поиск  

Форум "Delphi" (архив)


Паскаль, Делфи


 #0  Tester 06.06.05 10:19:01 - 07.06.05 10:26:15

Помогите с многопоточностью! Пли-и-из!



Ну очень нужно!
Подскажите где ошибся в логике...
Есть отдельный модуль, в котором описываю поток1.
Тамже описана функция, которую нужно вызывать из нескольких других потоков2.
Теперь сама функция:

Function RUN:TResult;
var
  Ok:boolean;
  R:TResult;
begin
  Ok:=False;

  // создаю поток, заполняю внутренние переменные
  // и запускаю
  CreateThread1(@Ok, @R);

  While not Ok do;

  Result := R;
end;

Результат - полный висяк! :(
Где ошибка? Цитата

 #1 deep © 06.06.05 10:40:53

> While not Ok do;
>
>  Result := R;
> end;


косяк здесь. Ты пытаешься контролировать доп.поток из потока программы. Так не получицца.
 #2 Mystic © 06.06.05 12:19:40

While not Ok do;

Никогда так не поступаю используй критические секции, мьютексы, семафоры, события, ... А дл яполноты картины нужен код функции CreateThread1. И вообще, что ты ждешь?

 #3  Fandros © 07.06.05 10:26:15

я просто не понимаю почему висяк! :(
Под руками нет кодека поэтому попробую по памяти...

Thread1((собачка)Ok, (собачка)R);
begin
  ИмяПотока = ТипПотока.Create(True);
  ИмяПотока.Ok := Ok;
  ИмяПотока.R: = R;
  ИмяПотока.Execute;
end;
 

Судя по тому, что я понял, второй поток так и не смог зпуститься! Но смело запускается если убрать While not Ok do;

> И вообще, что ты ждешь?
Что-то вроде многопоточного контроля внешнего оборудования
-Функцией послал разный запрос из разных потоков,
-Оборудование через ком его приняло и обрабатывает (паралельно) с разным временем задержки
-Потом возвращает результат с меткой "на какой вопрос ответ" (порядок не соблюдается)
-Поток приема должен вернуть прямо в функцию вызова RUN...





  • Тема находится в архиве

    Написать ответ

    Имя: Регистрация HTML?
    smiles смайлики
    Потом перейти в:    
    паутина



      ©  webest.net, 2002-2007  

    top.mail.ru
    » Бесплатный счетчик посещений
    » Рейтинг сайтов