Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Закрытие окна, интерфейсные потоки и окна 
:(
    Опции темы
Step
Дата 12.2.2003, 02:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



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


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
DENNN
Дата 12.2.2003, 04:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 3878
Регистрация: 27.3.2002
Где: Москва

Репутация: 1
Всего: 43



Как поток создаеться?
Средствами API или бибилиотеки MFC/BORLAND?
PM ICQ   Вверх
Vaulter
Дата 12.2.2003, 04:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1724
Регистрация: 30.12.2002
Где: бункер

Репутация: 2
Всего: 22



ExitThread(0); если из самого потока


--------------------
PM MAIL WWW ICQ   Вверх
[auxx]
Дата 12.2.2003, 07:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 148
Регистрация: 2.2.2003

Репутация: нет
Всего: нет



Цитата
Средствами API или бибилиотеки MFC/BORLAND?

Все смешал. Борланд сделал много библиотек. OWL, VCL, TurboVision, может что забыл.
PM MAIL   Вверх
Baa
Дата 12.2.2003, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

Репутация: 8
Всего: 12



Как-то невнятно задан вопрос...
Уничтожить окно?
ничего проще:
BOOL DestroyWindow(
HWND hWnd // handle to window to destroy
);
поток кильнуть? тож легко:
BOOL TerminateThread(
HANDLE hThread, // handle to the thread
DWORD dwExitCode // exit code for the thread
);
Не пойму, в чем проблема? опиши конкретнее, как ты уничтожаешь поток/окно? и как создаешь поток/окно?


--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
Step
Дата 12.2.2003, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



Спасибо всем, а поток создаю с помощью афхбегинтреад.


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
DENNN
Дата 12.2.2003, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 3878
Регистрация: 27.3.2002
Где: Москва

Репутация: 1
Всего: 43



MFC все таки.....
Если AfxBeginThread, то в MSDN рекомендуеться уничтожать поток только AfxEndThread
А AfxEndThread если я все правильно помню можно вызвать только внутри потока.
PM ICQ   Вверх
Baa
Дата 12.2.2003, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

Репутация: 8
Всего: 12



Чтобы завершить поток, созданный AfxBeginThread, из другого потока надо использовать средства синхронизации... сигналы например... подругому никак... всмысле не никак, а майкрософт не советуют по-другому.


--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
Step
Дата 12.2.2003, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



Цитата(DENNN @ 12.2.2003, 16:04)
А AfxEndThread если я все правильно помню можно вызвать только внутри потока.

вот это меня и не_устраивает


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
dim
Дата 12.2.2003, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 106
Регистрация: 24.12.2002

Репутация: нет
Всего: нет



Вообще-то если поток интерфейсный то в потоке должен быть цикл обработки сообщений. Следовательно закрывать поток можно посылкой какого-нибудь сообщения (напр WM_CLOSE или свое какое-то) с помощью PostThreadMessage или PostMessage из другого потока (это уже зависит от внутренней логики). Естессно что сообщение надо обрабатывать внутри закрываемого потока.
--------------------
that's all
PM MAIL   Вверх
Step
Дата 13.2.2003, 00:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



afxendthread вызванный из интерфесного потока, закрывает мне общий. а интерфейсный какимто макаром остается...
Цитата
Следовательно закрывать поток можно посылкой какого-нибудь сообщения (напр WM_CLOSE или свое какое-то) с помощью PostThreadMessage или PostMessage из другого потока (это уже зависит от внутренней логики).
спасибо попробую


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
DENNN
Дата 13.2.2003, 02:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 3878
Регистрация: 27.3.2002
Где: Москва

Репутация: 1
Всего: 43



Цитата
QUOTE (DENNN @ 12.2.2003, 16:04)
А AfxEndThread если я все правильно помню можно вызвать только внутри потока.

вот это меня и не_устраивает

Меня честно говоря тоже.


Цитата
Вообще-то если поток интерфейсный то в потоке должен быть цикл обработки сообщений. Следовательно закрывать поток можно посылкой какого-нибудь сообщения (напр WM_CLOSE или свое какое-то) с помощью PostThreadMessage или PostMessage из другого потока (это уже зависит от внутренней логики). Естессно что сообщение надо обрабатывать внутри закрываемого потока

Хотелось бы иметь общее решение для закрытия из главного потока других, созданных этим потоком. Но MS не рекомендует уж очень настоятельно, придеться все-таки пользоваться _beginthread




PM ICQ   Вверх
Step
Дата 13.2.2003, 02:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



Цитата
придеться все-таки пользоваться _beginthread
это каким макаром можно через бегин -енд сделать


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
Step
Дата 13.2.2003, 02:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



у меня все время закрывается основной поток.


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
Lion
Дата 13.2.2003, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 25.3.2002

Репутация: нет
Всего: 2



Ну а я делаю так:
1. Посылаю собственное сообщение потоку. m_pThreade->PostThreadMessage(WM_EXIT,0,0);
2. В потоке стоит обработчик, который получая сообщение просто вызывает ExitInstance(), в котором и зыкрываются все окна (у меня был поток, в котором динамически создавалось несколько диалогов). После вызова ExitInstance() поток автоматически завершается.
3. Ожидаю события о завершении потока DWORD dRes=::WaitForSingleObject(m_Event, 1000);

Если поток не откликается (типа он занят), что-ж сам виноват. Kill, Kill!!! как пелось в одной из песен группы Helloween.
Код

if(dRes==WAIT_TIMEOUT)
{
m_pThreade->SuspendThread();                                   // Останавливаем поток
::TerminateThread(m_pThreade->m_hThread,0);         // Уничтожаем врага
}


Это сообщение отредактировал(а) Lion - 13.2.2003, 15:35
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0600 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.