Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Поток(TThread) [D6, XP]


ooops ©   (2006-04-18 03:23:00) 

Привет всем!!!!!!!!!!!!!
program Project1;
uses
Forms,
 unit1 IN 'unit1' {Forma1}
 unit2 IN 'unit2' {Forma2}
 unThread IN 'myThread';
и т.д.

begin
Application.Initialize;
1 проверка наличия ключа в ком. строке
  создаю форму - forma1
2 проверка наличия ключа в ком. строке
  создаю форму - forma2
3 проверка наличия ключа в ком. строке
  создаю поток - myThread //НЕ РУЛИТ!!!!!
Application.Run;
{ЕСЛИ ВМЕСТЕ С ПОТОКОМ СОЗДАТЬ ФОРМУ, то рулит}
end;

{ДА, ЕЩЁ, НА МОМЕНТ СОЗДАНИЯ myThread, ОПРЕДЕЛЕНА ПЕРЕМЕННАЯ - ДЕСКРИПТОР ОКНА(HWND), С КОТОРЫМ ПОТОК, ПО ИДЕЕ, ДОЛЖЕН РАБОТАТЬ}

ВОПРОС:
КАК БЫ ЗАПУСТИТЬ ЭТОТ ПОТОК, БЕЗ СОЗДАНИЯ ДОПОЛНИТЕЛЬНЫХ ОБЬЕКТОВ И Т.Д. МОЖЕТ


ANB   (2006-04-19 15:29:00) [1]


> ooops   (18.04.06 03:23)

Прочитал ветку.
Если не тяжело - напиши по русски, что должна делать программа (без потоков и прочих технических подробностей реализации). Весьма вероятно, есть более простое решение, чем создать дополнительный поток при отсутствии основного :)


GrayFace   (2006-04-19 15:25:00) [2]

По идее, процесс и так не должен завешаться, пока не завершатся все потоки. Наверное, все дело в 17-й стролке.


Сергей М.   (2006-04-19 08:56:00) [3]


> Leonid Troyanovsky ©   (18.04.06 23:37) [10]


> содержащий


Поправка принята.


> Созданному потоку весьма сложно работать с окнами
> чужого приложения


Вероятно, автор, под "работой с окном чужого приложения" подразумевает всего лишь отправку этому окну сообщений.


> ooops   (18.04.06 17:15) [9]


> должен завершиться если это окно закрылось


И как ты себе мыслишь определение факта закрытия "чужого" окна ?
Как минимум глоб.хук нужно устанавливать для этого ..


Leonid Troyanovsky   (2006-04-19 00:02:00) [4]


> ooops   (18.04.06 17:15) [9]

> созданный поток работает с окном - (дескриптор окна(hwnd))


Созданному потоку весьма сложно работать с окнами
чужого приложения, бо это окна других потоков, а
на этом пути существует много ограничений.

--
Regards, LVT.


Leonid Troyanovsky   (2006-04-18 23:37:00) [5]


> Сергей М. ©   (18.04.06 16:47) [6]

>  создавший этот поток.


содержащий этот поток.

--
Regards, LVT.


ooops   (2006-04-18 17:15:00) [6]

созданный поток работает с окном - (дескриптор окна(hwnd))
//из другого приложения
и должен завершиться если это окно закрылось, а вот тогда можно
и приложению закрываться


Сергей М.   (2006-04-18 17:01:00) [7]


> поэтому он и не рулит без создания формы,
> а при созданной форме - рулит!


Процесс - объект ОС, форма - объект Borland VCL.

Процесс существует сам по себе и не обязан знать ни про какие борланды и ни про какие VCL и всякие там "формы".

Если у тебя что-то "не рулит" - показывай в коде.


> заставить процесс не завершаться, пока поток не заверниться


Если поток создан, следует дождаться его завершения.
А уж как ждать - это зависит от того как ты реализовал класс своего потока.


ooops   (2006-04-18 16:56:00) [8]

Значить
> Кодовый поток не может существовать сам по себе, он существует
> пока существует процесс, создавший этот поток.


Это я знаю, поэтому он и не рулит без создания формы,
а при созданной форме - рулит!

Тогда как заставить процесс не завершаться, пока поток не заверниться.

Простите за крики, теперь просвещен - про КРИКИ


Сергей М.   (2006-04-18 16:47:00) [9]


> ooops   (18.04.06 16:14) [3]
>
> НУЖНО ЕГО ОСТАВИТЬ РАБОТОСПОСОБНЫМ ПРИ ЗАКРЫТИИ
> ПРИЛОЖЕНИЯ.


Кодовый поток не может существовать сам по себе, он существует пока существует процесс, создавший этот поток.

Нет процесса - нет и потока.

Запуск приложения ведет к созданию соотв.процесса, завершение приложения ведет к завершению соотв.процесса. Завершение процесса же безусловно ведет к уничтожению всех кодовых потоков, существовавших в контексте процесса во время его жизни.

p.s.

И не надо так кричать - тебя прекрасно слышно)


Мефисто   (2006-04-18 16:38:00) [10]

НУЖНО ЕГО ОСТАВИТЬ РАБОТОСПОСОБНЫМ ПРИ ЗАКРЫТИИ
ПРИЛОЖЕНИЯ.

Это точно также, чтобы таймер работал когда комп вырублен :)

>> Create (True)
Определи параметры конструктора какие надо и передавай чего хочешь...


ooops   (2006-04-18 16:17:00) [11]

или, может, как то заставить приложение не закрываться пока поток не закроется


ooops   (2006-04-18 16:14:00) [12]

СУТЬ ВОПРОСА НЕ В ТОМ, ЧТО НАДО СОЗДАТЬ ПОТОК И КАК ЕГО СОЗДАТЬ,
А В ТОМ, ЧТО - НУЖНО ЕГО ОСТАВИТЬ РАБОТОСПОСОБНЫМ ПРИ ЗАКРЫТИИ
ПРИЛОЖЕНИЯ.

Извините за не правильно поставленный вопрос, время было познее :-)


> А поток обязательно там создавать ?
> И вообще как ты поток создаеш ?


MyThread := TThread.Create(True);
with MyThread do
begin
 fHWND := ДЕСКРИПТОР ОКНА(HWND);
end;
MyThread.Resume;


Сергей М.   (2006-04-18 10:00:00) [13]


> ooops   (18.04.06 03:23)


Прямо так и запустить :

MyThread := TMyThread.Create(ДЕСКРИПТОР ОКНА(HWND), С КОТОРЫМ ПОТОК, ПО ИДЕЕ, ДОЛЖЕН РАБОТАТЬ);


balepa   (2006-04-18 06:37:00) [14]

А поток обязательно там создавать ?
И вообще как ты поток создаеш ?


> {ДА, ЕЩЁ, НА МОМЕНТ СОЗДАНИЯ myThread, ОПРЕДЕЛЕНА ПЕРЕМЕННАЯ
> - ДЕСКРИПТОР ОКНА(HWND), С КОТОРЫМ ПОТОК, ПО ИДЕЕ, ДОЛЖЕН
> РАБОТАТЬ}

Я не знаю какие у тебя там идеи.

Привиди нормальный код


Наверх

Титульная страница Поиск, карта сайта Написать письмо