![]() |
|
|
![]()
|
|
| Nuzur |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 4.7.2004 Репутация: 3 Всего: 5 |
Я создаю поток HCOM1 = AfxBeginThread(COM1, this);
как потом его остановиьть чтобы неюыло ликов? Поток должен выполняться на протяжении всей роботы программы. -------------------- Never again... |
|||
|
||||
| Coocky |
|
|||
![]() GUI гуру ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2879 Регистрация: 16.2.2004 Где: Украина. Запорожь е Репутация: 25 Всего: 62 |
Неь,нужно прописать что-то типа AutoDelete///Короче посмотрю,а то не помню...Ну если раньше не ответят..
Вообще-то посмотри МСДН про потоки в МФС там есть -------------------- Верю в смерть после жизни, в любовь после секса ,в крем после бритья |
|||
|
||||
| S.A.P. |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2664 Регистрация: 11.6.2004 Репутация: 2 Всего: 71 |
Что у тебя означает COM1. По идее это должен быть объект - наследник класса CWinThread, тогда глюков быть не должно.
|
|||
|
||||
| En_t_end |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2074 Регистрация: 4.12.2004 Репутация: 2 Всего: 20 |
А глюки будут, так как с этого дня ты узреешь, что в С++ надо обязательно уничтожать обьекты памяти, особенно при работе с потоками и при их многоразовом использовании
Вот это ссылка тебе возможно поможет : http://forum.vingrad.ru/index.php?showtopic=38847 А вообще тебе надо именно приостановить ?(для таких случаев имхо suspendthread смотри) или остановить, поменять значения для потока, а потом запустить ? - вот если так, то по той ссылке тебе обязательно надо сходить! |
|||
|
||||
| Nuzur |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 4.7.2004 Репутация: 3 Всего: 5 |
Фунция, простите поток, обьявлен у меня так
Добавлено @ 17:33 Фунция, простите поток, обьявлен у меня так UINT Stream(LPVOID Param) Дело в том что он должен просматривать очередь и если она не пуста то выполнять там определенные действий, а при закрытии программы вызываеться деструктор очередь, ну и должен закрыться поток. -------------------- Never again... |
|||
|
||||
| S.A.P. |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2664 Регистрация: 11.6.2004 Репутация: 2 Всего: 71 |
Какой смысл тебе использовать MFC функции, когда та не создаешь объект класса CWinThread?.
Делай на API, вот пример:
|
|||
|
||||
| En_t_end |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2074 Регистрация: 4.12.2004 Репутация: 2 Всего: 20 |
Да WinApi в этом случае будет актуальнее...
|
|||
|
||||
| alien_by |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 29.11.2004 Где: Belarus/Gomel Репутация: 5 Всего: 8 |
Хорошо зарекомендовал себя след способ
В класе своего трида (например СMyThread) обьявляешь, например, метод ReleaseThread. void CMyThread::ReleaseThread(int nExitCode) { PostThreadMessage(WM_QUIT, nExitCode, NULL); } ну а когда поток надо кикнуть, вызываешь данный метод. Работает на ура. |
|||
|
||||
| En_t_end |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2074 Регистрация: 4.12.2004 Репутация: 2 Всего: 20 |
alien_by
Всё гениальное просто ! |
|||
|
||||
| Adil' |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 311 Регистрация: 26.8.2004 Где: Питер Репутация: 3 Всего: 15 |
А просто
-------------------- Удачи |
|||
|
||||
| Nuzur |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 4.7.2004 Репутация: 3 Всего: 5 |
DWORD WINAPI Наверное вы правы, так действительно будет лучше, но лик всеравно остался, правда меньше 100 бай, но это вопрос принцыпа.
Может там проблема в самой функции? Она организована так: DWORD WINAPI COM1(LPVOID Param) { while(true) { ..... Sleep(delay); }; return 0; } Идем дальше, void CMyThread::ReleaseThread(int nExitCode) { PostThreadMessage(WM_QUIT, nExitCode, NULL); } ничего не сработало -------------------- Never again... |
|||
|
||||
| S.A.P. |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2664 Регистрация: 11.6.2004 Репутация: 2 Всего: 71 |
Nuzur мой способ возьми.
|
|||
|
||||
| Adil' |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 311 Регистрация: 26.8.2004 Где: Питер Репутация: 3 Всего: 15 |
Если на WinApi (точнее, не используя CWinThread), то PostThreadMessage не будет работать до тех пор, пока в процедуру потока не будет вставлена соответствующая обработка сообщений виндов (GetMessage или PeekMessage).
Сделай лучше
Это сообщение отредактировал(а) Adil' - 16.1.2005, 12:16 -------------------- Удачи |
|||
|
||||
| Goldberg |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 122 Регистрация: 3.6.2004 Репутация: нет Всего: нет |
Если будешь использовать CWinThread, то:
BEGIN_MESSAGE_MAP(CTvoiPotok, CWinThread) ON_THREAD_MESSAGE(WM_TO_THREAD, OnWMToThread) END_MESSAGE_MAP() В InitInstance() своего потока вызывай Run(). Ну и потом шлешь сообщения: PostThreadMessage(TvoiPotok.m_nThreadID, WM_TO_THREAD, 0, 0); --------------------
Вот такая у меня привычка, браться за задание, о выполнение которого я изначально не имею никакого представления. |
|||
|
||||
| Coocky |
|
|||
![]() GUI гуру ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2879 Регистрация: 16.2.2004 Где: Украина. Запорожь е Репутация: 25 Всего: 62 |
Че-то я проморозился и морозиться продолжаю
Ну ладно,пора браться за старое alien_by А если не работаю с производным классом от СWinThread? Вообще для остановки потока я знаю три способа: 1.Остановка с помощю задание флага,используя глобальную переменную(примитивно и неактуально) 2.Способ предложеный(похожий) на alien_by,с помощью отправки своего сообщения. 3.С помощью класса CEvent. Если еще интересно ответь,я напишу с примерами. -------------------- Верю в смерть после жизни, в любовь после секса ,в крем после бритья |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |