powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / "Убить" поток
11 сообщений из 11, страница 1 из 1
"Убить" поток
    #34411833
ThreadKiller
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть поток, созданный CreateThread. В нем выполняется бесконечный цикл. Как "убить" поток?
...
Рейтинг: 0 / 0
"Убить" поток
    #34411886
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Цикл должен быть прерываемым. Можно банально через глобальную переменную, которая будет служить признаком окончания потока, можно через событие (event) можно еще как-то. Главное, чтобы поток добровольно прервал работу.
...
Рейтинг: 0 / 0
"Убить" поток
    #34411980
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
только volatile не забудьте, а то я уже знаю следующий вопрос :(
...
Рейтинг: 0 / 0
"Убить" поток
    #34412164
ThreadKiller
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Создал глобальную переменную int extThread . В CreateForm
Код: plaintext
extThread =  0 ;
В потоке бесконечный прерываемый цикл
Код: plaintext
1.
2.
3.
extThread  =  1 ;
while(extThread  ==  1 ){
...
}
На кнопку "остановки" вешаю
Код: plaintext
extThread  =  0 ;
При нажатии кнопки останова поток продолжает работу.
...
Рейтинг: 0 / 0
"Убить" поток
    #34412178
ThreadKiller
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gluk (Kazan)только volatile не забудьте, а то я уже знаю следующий вопрос :(
И если объявить гловальную переменную через volatile int extThread . То всё равно не завершает поток работу свою
...
Рейтинг: 0 / 0
"Убить" поток
    #34412259
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это конечно не очень корректно
но может TerminateThread
...
Рейтинг: 0 / 0
"Убить" поток
    #34412296
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А в обработчик точно входит? Складывается такое впечатление, что ваш бесконечный цикл не дает GUI обработать очередь сообщений.
...
Рейтинг: 0 / 0
"Убить" поток
    #34412463
ThreadKiller
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нажатие кнопки запуска
Код: plaintext
1.
2.
int Pr =  0 ;
DWORD ThreadId =  0 ;
CreateThread(NULL,  0 , (LPTHREAD_START_ROUTINE) threed1, &P,  0 , (LPDWORD) & ThreadId);
Собсна сам поток-процедура
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
 void threed1(){
         int id =  0 ;
         while (exitCode ==  1 ){
                SleepEx( 1000 , false);
                if (detect() ==  0 ) 
                        id = get_id();
                    
         }
...
Рейтинг: 0 / 0
"Убить" поток
    #34412485
ThreadKiller
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сорри
Нажатие кнопки запуска
Код: plaintext
1.
2.
int Pr =  0 ;
DWORD ThreadId =  0 ;
CreateThread(NULL,  0 , (LPTHREAD_START_ROUTINE) threed1, &P,  0 , (LPDWORD) & ThreadId);
Собсна сам поток-процедура
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
 void threed1(){
         int id =  0 ;
         exitCode = 1 ;
         while (exitCode ==  1 ){
                SleepEx( 1000 , false);
                if (detect() ==  0 ) 
                        id = get_id();
                    
         }
Забыл добавить:
Объявление
Код: plaintext
volatile int exitCode;
CreateForm
Код: plaintext
exitCode =  0 ;
Кнопка СТОП
Код: plaintext
exitCode =  0 ;
...
Рейтинг: 0 / 0
"Убить" поток
    #34412830
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 ThreadKiller

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

Добавьте хотя-бы вывод на экран (или в DEBUG output (или в файл)) состояния переменной exitCode.
...
Рейтинг: 0 / 0
"Убить" поток
    #34413044
ThreadGuard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 ThreadKiller
Полезно было бы почитать вот это, например:
http://doks.gorodok.net/?p=555#h6
ну и дальше главы по синхронизации... ну и потом ещё от начала до конца ;)

А вообще непонятно из-за чего возникли проблемы...
Элемантарный рабочий пример (BCB 6):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
HANDLE hThread;
unsigned ThreadId;
volatile bool exitflag;
HANDLE formHandle;
int counter =  0 ;
//---------------------------------------------------------------------------
unsigned __stdcall ThreadFunc(void* ArgList)
{
    exitflag = false;
    while( !exitflag )
    {
        Sleep( 500 );
        PostMessage(formHandle,WM_USER+ 1 , 0 , 0 );
    }
    return  0 ;
}
//---------------------------------------------------------------------------
void __fastcall TFThreadTest::BtnStartClick(TObject *Sender)
{
    hThread = (HANDLE)_beginthreadex(NULL,  0 , ThreadFunc, NULL,  0 , &ThreadId);
}
//---------------------------------------------------------------------------
void __fastcall TFThreadTest::FormCreate(TObject *Sender)
{
    formHandle = Handle;
}
//---------------------------------------------------------------------------
//ловим WM_USER+1, присланный из потока
void __fastcall TFThreadTest::Msg(TMessage &Message)
{
    Label->Caption = IntToStr(++counter);
}
//---------------------------------------------------------------------------
void __fastcall TFThreadTest::BtnStopClick(TObject *Sender)
{
    exitflag = true;    
}
//---------------------------------------------------------------------------
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / "Убить" поток
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]