Потоки в Lazarus

tthreadПотоки в Lazarus создаются так же как и в Delphi. Для тех кто никогда не работал с потоками и не знают зачем они нужны, поясню: Основная идея создания потоков в том, что приложение может производить некоторую обработку информации в фоновом режиме во втором потоке, для избежания зависания интерфейса программы, а пользователь может продолжать работу с помощью основного потока. Основной поток создается автоматически ОС при запуске приложения.

Главным правилом при работе с потоками в Lazarus является то, что только главный поток должен быть единственным потоком, который обновляет компоненты, взаимодействующие с пользователем: иначе, приложение может зависнуть.

Если при работе в потоке, нужно обновить видимый компонент, то можно применить метод Synchronize. Когда вы вызываете метод через Synchronize(@MyMethod), запущенный поток приостанавливается, код метода MyMethod запускается в главном потоке, а затем выполнение потока будет продолжено.

Итак. Создадим приложение, и добавим следующий код:

Для облегчения создания функций\процедур в приложении, можно поставить курсор на процедуру, нажать Shift+Ctrl+C и Lazarus автоматически создаст скилет данной процедуры ниже. Напишем код для процедуры Execute:

Процедура ShowResult:

Напоминаю что данная процедура будет запускаться основным потоком, благодаря Synchronize.

Как вы понимаете на форме должны присутствовать 1 Edit и кнопка которая будет запускать наш поток.

Код для кнопки запуска потока, добавим следующий:

Готово. Исходники Скачать 586Кб

 

Потоки в Lazarus обновлено: Апрель 20, 2016 автором: Oleg E.
Share

4 комментариев “Потоки в Lazarus

  1. Про анонимные потоки что можете сказать? В интернете маловато примеров на Lazarus.

    • Добрый день. Честно говоря не пробовал использовать анонимные процедуры в Lazarus. Гоогл говорит что использовать их можно только в Delphi.

  2. Здравствуйте, я сделал приложение на подобии драм-машины, привязал к каждой кнопке сэмпл, но проблема в том что они все воспроизводятся в одной потоке, то есть при нажатии сразу на два звука, второй прерывает первый.
    Задумался над распоточиванием, может есть идеи как это реализовать со звуками?

    • Добрый день, Марат.
      Вам необходимо вопроизводить звуки в отдельном потоке.
      Создаете процедуру с передаваемым параметром(Какой звук воспроизводить) и запускаете эту процедуру в отдельном потоке.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *