|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
18.12.2007, 15:23 | #1 |
Форумчанин
Регистрация: 23.09.2007
Сообщений: 147
|
Передача параметра в поток
Суть в чём, пишу прогу - музыкальный редактор музыки на бипере, хочу, чтобы были кнопки Play Pause и Stop, поэтому создаю поток с процедуры проигрывания, находящейся в модуле, она принимает строку, по содержанию что-то вроде нот как в ранних прогах на сотовых, причем не внутри потока все работает нормально, пытался передавать как параметр просто указатель на строку, но проигрывалась или белеберда или ниче не проигрывалось,
пробовал переделать процедуру и сделать входным параметром указатель, а уже в самой процедуре преобразовывать его в стоку, но опять ноль результата. Процедуру не перегружал, а дал им разные названия: той, что по указателю и оригиналу Поэтому возникает вопрос: в чем может быть проблема? P.S. поток создаю ф-ей beginthread из SysUtils а не createthread из Windows
Я надеваю тапочки, ищу чем похмелиться, ах, если я сейчас умру, то на... я родился
Последний раз редактировалось joker; 18.12.2007 в 15:27. |
18.12.2007, 15:55 | #2 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
ну так юзайте тогда TThread раз не апи
|
18.12.2007, 19:39 | #3 |
добрый няша
Старожил
Регистрация: 29.10.2006
Сообщений: 4,804
|
лучше приведи код с помощью которого вызываешь поток и как в потоке обрабатываешь строку?
|
19.12.2007, 12:28 | #4 |
Форумчанин
Регистрация: 23.09.2007
Сообщений: 147
|
короче на васме мне объяснили прописную истину, что переменная должна быть глобальной, чтобы её в поток передавать и из-за моей тупости оказались правы :-)
У меня возникло два вопроса: Есть ли разница для beginthread где объявлена переменная в implemetation или interface? Как смастерить аналог свойства Terminated обьекта TTread в дельфи на winAPI, небось в самом объекте просто постоянно обращаются к таблице запущенных потоков каким-нибудь из способов?
Я надеваю тапочки, ищу чем похмелиться, ах, если я сейчас умру, то на... я родился
|
19.12.2007, 13:26 | #5 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
после implementation доступ только в юните данном, если выше то те юниты, которые подключили данный, так же имеют доступ к ней )
Terminated - это всеголиш Boolean :D просто в в потоке цикл - пока оно true то работаем, если нет, то досвидания ))) |
19.12.2007, 16:06 | #6 |
Форумчанин
Регистрация: 23.09.2007
Сообщений: 147
|
Не, а как отследить конец потока, я пробовал в модуле в процедуре потока поставить изименение глобальной булиновской модульской переменной, вначале потока в фолс, в конце в тру, и в самом приложении создал следящий поток (паранойя, конечно, но чё поделать, как-то нужно после завершения проигрывания энаблить кнопку плей и дизаблить паузу и стоп), в котором ждет пока не завершится поток проигрывания именно благодаря этой переменной, а потом делает свое дело, но почему-то не пашет, может дело в том, что поток не видит: либо переменную модуля, либо переменную формы, хотя к кнопкам я обращался через Form1.
Я надеваю тапочки, ищу чем похмелиться, ах, если я сейчас умру, то на... я родился
|
19.12.2007, 19:30 | #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; Вот и все... цикл окончится и досвидания |
19.12.2007, 19:58 | #8 |
добрый няша
Старожил
Регистрация: 29.10.2006
Сообщений: 4,804
|
у класса TThread есть свойство Handle, в котором содержится хендл твоего потока, используешь API функцию TerminateThread и передаёшь ей хендл твоего потока.
TerminateThread(MyThread.Handle,0); |
21.12.2007, 10:02 | #9 |
Форумчанин
Регистрация: 23.09.2007
Сообщений: 147
|
Я имею ввиду, что поток не бесконечный. Создал его, и не знаешь, когда он завершится, помимо булиновской переменной, с помощью вин апи можно ли обратится к хендлу потока и узнать завершился он уже или ещё нет?
Я надеваю тапочки, ищу чем похмелиться, ах, если я сейчас умру, то на... я родился
|
21.12.2007, 17:22 | #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 |