Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 2 382

Раздел: Delphi » Прочее
/ вопрос открыт /

Приветствую, уважаемые эксперты!
Есть вопрос по созданию многопоточного приложения. Пишу плеер с использованием BASS. Для обобщённой работы с ним использую написанный мной класс. Через его методы идёт работа со звуком.
При работе с интернет-радио приложение ненадолго виснет, ибо басс пытается соединиться и загрузить инфу. Чтобы такого не происходило, я думаю, нужно использовать многопоточное приложение.

Теперь собственно сам вопрос :
Что нужно помещать в поток и как им пользоваться, чтобы интерфейс посылал что-то вроде сообщений о нужных действия, а они сами выполнялись в потоке?

Как работать с потоками я знаю, но как сделать то что нужно мне не знаю?

Виталий Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Виталий (статус: 2-ой класс)
Вопрос отправлен: 3 февраля 2009, 07:48
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 6; последнее сообщение — 3 февраля 2009, 13:09; участников в обсуждении: 3.
Death_Master

Death_Master (статус: Посетитель), 3 февраля 2009, 12:11 [#1]:

Что нужно помещать в поток и как им пользоваться, чтобы интерфейс посылал что-то вроде сообщений о нужных действия, а они сами выполнялись в потоке?

Вы сами ответили на свой вопрос - всё кроме интерфейса.
данные проще всего передввать через общую память.
Т.Е. : создайте pas файл с общимипеременными и используйте его в интерфейсе И потоке.
Обычно захожу по ночам... (60-70%)
Если нужно что-то написать, то беру оборудованием, деньгими и пивом(при личной встрече)...
P.S. Помогаю и рассказываю бесплатно ^_^.....Nyaaa!
Вадим К

Вадим К (статус: Академик), 3 февраля 2009, 12:19 [#2]:

to Death_Master
А зачем изобретать "общую память"? У потока и так она с основным потоком общая.
to Виталий
Лично я бы делал так. у потока есть главный цикл вида
while not Terminaded do
так вот в нем надо время от времени читать информация с какой нибуть переменной (структуры), которую заполняет главное приложение. О синхронизации я думаю говорить не стоит, сами должны быть в курсе.
Если цикл крутиться часто, то задержки будут минимальными. Обратно, интерфейсу удобно отправлять через PostMessage
Галочка "подтверждения прочтения" - вселенское зло.
Виталий

Виталий (статус: 2-ой класс), 3 февраля 2009, 12:21 [#3]:

А как посылать сообщения в поток о том что нужно сделать? Просто если я вызову метод класса из интерфейса, то код же будет выполняться в основном потоке, а не в дополнительном.
Виталий

Виталий (статус: 2-ой класс), 3 февраля 2009, 12:24 [#4]:

Значит это единственный более мение удобный вариант : записывать в переменную потока то, что нужно выполнить.
Только тогда в потоке придётся делать выбор нужной функции, а их там не мало. И как быть с параметрами?
Вадим К

Вадим К (статус: Академик), 3 февраля 2009, 12:46 [#5]:

Вы внимательно читали, что я писал? никто не мешает использовать структуру. В одном с своих проектов я сделал очень оригинально. Я создал абстрактный класс, который имел всего один метод ExecMe. Потом для каждого необходимого действия пишеться наследник от этого класса, где перекрывается этот метод (при этом никто не мешает добавить туда других методов и свойств).
Когда основному потоку необходимо выполнить какое то действие, то он создает нужного наследника, инициализирует и ложит в специальную очередь (у меня были красивые конструкторы с параметрами,поэтому это была одна строка). С другой стороны поток доставал указатели на эти объекты (всё синхронизировалось аккуратно) дергал метод ExecMe и удалял объект. Самое интересное. что потоку совершенно не нужно знать о том, что ему надо делать. И создавать новое действие очень просто и быстро. Так как у меня был не один поток, то метод, который доставал объекты, инициализировал некоторые переменные, что бы объект имел доступ к потоку.
Но самое весёлое в этом всём то, что объекты могли сериализироваться (сохраняться) в xml и очередь передавалась через сеть.... Но это другая история.
Галочка "подтверждения прочтения" - вселенское зло.
Виталий

Виталий (статус: 2-ой класс), 3 февраля 2009, 13:09 [#6]:

Вот! Это мне и нужно было услышать!
Большое спасибо!

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:48
Выполнено за 0.02 сек.