| 
| 
 | Вопрос # 2 164/ вопрос открыт / | 
 |  Здравствуйте, уважаемые эксперты!Возникла необходимость второй раз использовать динамический массив потоков. Класс был создан ранее на основе TList. Все работает отлично. Просто поменял содержимое Execute у шаблона для потока и все. Но попытался на будущее создать визуальный компонент с набором свойств и событий. Столкнулся с проблемой: как код пользователя прописанный в событии (и работающий с глобальными переменными) запускать циклически в потоке?
 Приложение:Переключить в обычный режим implementation uses  NsThreadList; procedure TNsThread.Execute;begin  while True do    begin       if Terminated Then Terminate;    end;end;
Примечание #1 (6 декабря 2008, 13:50): В приложении не Terminate, а Exit. Извиняюсь. 
 
|  |   Вопрос задал: Nasgool (статус: 2-ой класс)Вопрос отправлен: 6 декабря 2008, 13:43
 Состояние вопроса: открыт, ответов: 0.
 |  
 Мини-форум вопросаВсего сообщений: 4; последнее сообщение — 7 декабря 2008, 12:11; участников в обсуждении: 3. 
|   | Вадим К (статус: Академик), 6 декабря 2008, 18:25 [#1]:Плохое это дело - связывать потоки и VCL часть. Вначале кажеться все просто, но потом начитают лезть проблемы - надо очень аккуратно всё синхронизировать. Почему - это тема долгого разговора, просто поверьте. Если хочеться разобраться - читайте Рихтера (автор такой, но там уровень высокий). Поэтому лучше создать класс-массив (с надёжной синхронизацией) или использововать готовый - TThreadList.
 Заменять метод Execute тоже не обязательно - никто не мешает его сделать абстрактным и наследоваться от него.
 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | min@y™ (статус: Доктор наук), 7 декабря 2008, 01:19 [#2]:if Terminated Then Terminate; 
 Упал со стула при виде этого.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | Вадим К (статус: Академик), 7 декабря 2008, 10:12 [#3]:Вполне цивильный код. вот только если расшифровать его, то будет так 
 if Terminated Then Terminate:= true;То есть , совершенно не то, что ожидал пишущий. А теперь намёк на правильный код
 
 if Terminated Then 
begin
  //некие действия для завершения
  //например освобождение ресурсов
 // можно в отдельную процедуру
 Exit;
end; Галочка "подтверждения прочтения" - вселенское зло. |  
|   | Nasgool (статус: 2-ой класс), 7 декабря 2008, 12:11 [#4]:комментарий был написан через минуту после вопроса  )) |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |