Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 20.05.2008, 19:28
pixel pixel вне форума
Прохожий
 
Регистрация: 23.01.2008
Сообщения: 16
Репутация: 10
По умолчанию Потоки

Добрый день.
Научите, плиз, как с потоками работать. Есть у меня какая то статья, да и пример в демосах смотрел - ну не понятен мне принцип. Объясните на двух пальцах и, если можно, дайте самый простейший пример создания потока. Главное не понятно, хотел в потоке реализовать просмотр gif-а, а здесь говорят, что его нельзя в поток совать - так как же тогда вообще с потоками работать?
Ответить с цитированием
  #2  
Старый 20.05.2008, 20:16
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,039
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Тебе TThread?

Ну, собственно, проблема в том, что в общем случае из потока на экран лучше вообще ничего не показывать. Хотя если очень хочется, то можно (см. в сторону Canvas.Lock и Synchronize).

В общем теория такова.
Поток, по сути это некоторая процедура, которая выполняется независимо от основной программы (оносительно независимо). Мастер Дельфей создает для тебя обертку - потомок от TThread, в котором тебе надо собственно реализовать содержимое этой самой функции.

Для упрощения можно представить, что поток - это некоторая отдельная программа, выполняющаяся паралельно с твоей основной. Но программа, НЕ ИМЕЮЩАЯ ОКНА. Т.е. ты там можешь делать все, что угодно, но для вывода на экран ты должен будешь обратиться к основной программе.

Потоки делают 2х видов.
1. Для однократного выполнения. Такой поток выполняет задачу и самоуничтожается.
2. Поток, который работает постоянно. В этом случае, обычно, поток создается при старте приложения, уничтожается вместе с приложением. в процессе работы приложения может быть "усыплен", а потом восстановлен. Управление таким потоком обычно осуществляется с помощью его свойств.

Еще надо посмотреть в сторону объектов синхронизации, т.е. объектов, обеспечивающих защиту данных. CriticalSection тебе тут в помощь.

Если кратко, то это все. А дальше смотри примеры, читай хелп и пробуй.
Целый учебник тут писать никто не будет.
Ответить с цитированием
  #3  
Старый 21.05.2008, 19:17
pixel pixel вне форума
Прохожий
 
Регистрация: 23.01.2008
Сообщения: 16
Репутация: 10
По умолчанию

спасибо за ответ. сегодня нашел книжку, вроде там что то про потоки есть. просто интересно, вот например я хочу в поток выделить обращение к базе данных. во-первых, там каждый раз должны подменяться запросы, а во-вторых, ведь процесс отображения данных выборки должен будет производиться на главной форме (соответственно в главном потоке) и взаимодействовать с компонентами для выборки и отображения данных. а в самом потоке вроде как с компонентами взаимодействовать нельзя. значит придется синхронизироваться после выполнения каждого потока.
Ответить с цитированием
  #4  
Старый 21.05.2008, 19:52
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,039
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

можно сделать так.

1. От интерфейса отцепляешь датасет.
2. Запускаешь поток, и передаешь ему ссылку на датасет и запрос.
3. Когда все завершится, поток должен сообщить главному приложению, что все готово и "умереть".
4. По получении сообщения от потока (можно сообщением, можно кал-бэком) обратно прицепляешь интерфейс к датасету.

С другой стороны, для данной задачи уж лучше часики повесить. Поток можно использовать, например, когда у тебя есть в БД картинки. Основной запрос выгребает записи. Далее, по ID записей дополнительный поток начинает подгружать нужные картинки и засовывать их в нужные контролы. Возможно, у контролов придется заблокировать канву, что бы не дергались раньше времени.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 21:20.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter