![]() |
|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 23.09.2007
Сообщений: 147
|
![]()
Суть в чём, пишу прогу - музыкальный редактор музыки на бипере, хочу, чтобы были кнопки Play Pause и Stop, поэтому создаю поток с процедуры проигрывания, находящейся в модуле, она принимает строку, по содержанию что-то вроде нот как в ранних прогах на сотовых, причем не внутри потока все работает нормально, пытался передавать как параметр просто указатель на строку, но проигрывалась или белеберда или ниче не проигрывалось,
пробовал переделать процедуру и сделать входным параметром указатель, а уже в самой процедуре преобразовывать его в стоку, но опять ноль результата. Процедуру не перегружал, а дал им разные названия: той, что по указателю и оригиналу Поэтому возникает вопрос: в чем может быть проблема? P.S. поток создаю ф-ей beginthread из SysUtils а не createthread из Windows
Я надеваю тапочки, ищу чем похмелиться, ах, если я сейчас умру, то на... я родился
Последний раз редактировалось joker; 18.12.2007 в 15:27. |
![]() |
![]() |
![]() |
#2 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
![]()
ну так юзайте тогда TThread раз не апи
|
![]() |
![]() |
![]() |
#3 |
добрый няша
Старожил
Регистрация: 29.10.2006
Сообщений: 4,804
|
![]()
лучше приведи код с помощью которого вызываешь поток и как в потоке обрабатываешь строку?
|
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 23.09.2007
Сообщений: 147
|
![]()
короче на васме мне объяснили прописную истину, что переменная должна быть глобальной, чтобы её в поток передавать и из-за моей тупости оказались правы :-)
У меня возникло два вопроса: Есть ли разница для beginthread где объявлена переменная в implemetation или interface? Как смастерить аналог свойства Terminated обьекта TTread в дельфи на winAPI, небось в самом объекте просто постоянно обращаются к таблице запущенных потоков каким-нибудь из способов?
Я надеваю тапочки, ищу чем похмелиться, ах, если я сейчас умру, то на... я родился
|
![]() |
![]() |
![]() |
#5 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
![]()
после implementation доступ только в юните данном, если выше то те юниты, которые подключили данный, так же имеют доступ к ней )
Terminated - это всеголиш Boolean :D просто в в потоке цикл - пока оно true то работаем, если нет, то досвидания ))) |
![]() |
![]() |
![]() |
#6 |
Форумчанин
Регистрация: 23.09.2007
Сообщений: 147
|
![]()
Не, а как отследить конец потока, я пробовал в модуле в процедуре потока поставить изименение глобальной булиновской модульской переменной, вначале потока в фолс, в конце в тру, и в самом приложении создал следящий поток (паранойя, конечно, но чё поделать, как-то нужно после завершения проигрывания энаблить кнопку плей и дизаблить паузу и стоп), в котором ждет пока не завершится поток проигрывания именно благодаря этой переменной, а потом делает свое дело, но почему-то не пашет, может дело в том, что поток не видит: либо переменную модуля, либо переменную формы, хотя к кнопкам я обращался через Form1.
Я надеваю тапочки, ищу чем похмелиться, ах, если я сейчас умру, то на... я родился
|
![]() |
![]() |
![]() |
#7 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
![]()
боже мой... я имел ввиду типа
unit ... var Term: Boolean = False; implementation ... procedure execute; var ... begin ... while not Term do ... end; Килл данный поток просто Term := True; Вот и все... цикл окончится и досвидания ![]() |
![]() |
![]() |
![]() |
#8 |
добрый няша
Старожил
Регистрация: 29.10.2006
Сообщений: 4,804
|
![]()
у класса TThread есть свойство Handle, в котором содержится хендл твоего потока, используешь API функцию TerminateThread и передаёшь ей хендл твоего потока.
TerminateThread(MyThread.Handle,0); |
![]() |
![]() |
![]() |
#9 |
Форумчанин
Регистрация: 23.09.2007
Сообщений: 147
|
![]()
Я имею ввиду, что поток не бесконечный. Создал его, и не знаешь, когда он завершится, помимо булиновской переменной, с помощью вин апи можно ли обратится к хендлу потока и узнать завершился он уже или ещё нет?
Я надеваю тапочки, ищу чем похмелиться, ах, если я сейчас умру, то на... я родился
|
![]() |
![]() |
![]() |
#10 |
добрый няша
Старожил
Регистрация: 29.10.2006
Сообщений: 4,804
|
![]()
первый вариант: запустить и ждать.
Код:
Код:
Код:
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Передача компонента как параметра в функцию | hayhay | Microsoft Office Excel | 1 | 11.03.2008 15:53 |
Как сделать выбор параметра запроса из таблицы | valery | Microsoft Office Access | 1 | 30.11.2007 11:17 |
Передача параметра компаненту на другой форме. | Kukkk | Компоненты Delphi | 1 | 28.09.2007 00:31 |
Помогите с чтением параметра в реестре!! | snake-as | Общие вопросы Delphi | 2 | 14.03.2007 15:50 |