Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3

Правильно завершить поток

29.12.2015, 15:39. Показов 3720. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!!!

Делаю программу через поток. Вот код
C++
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
#include <vcl.h>
#pragma hdrstop
 
#include "UTime1.h"
#include "UTime2.h"
 
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
MyTime *Thread;
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BBeginClick(TObject *Sender)
{
Thread = new MyTime(false);
Thread->FreeOnTerminate = false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BRespClick(TObject *Sender)
{
  Thread->Terminate();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
  Thread->Terminate();
}
//---------------------------------------------------------------------------
C++
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
#include <windows.h>   // чтобы не было проблем с неймспейсами
#include <wininet.h>   // интернет функции WinAPI
#include <vcl.h>
#pragma hdrstop
#include "UTime1.h"
#include "UTime2.h"
#pragma package(smart_init)
#pragma link "wininet.lib"   // линкуем библу
extern MyTime *Thread;
//---------------------------------------------------------------------------
 
 
__fastcall MyTime::MyTime(bool CreateSuspended)
    : TThread(CreateSuspended)
{
 
oldstate = true;
}
//---------------------------------------------------------------------------
void __fastcall MyTime::Execute()
{
    DWORD flags;
    while(!Terminated) {
        bool state = InternetGetConnectedState(&flags, 0);
        if(state != oldstate) {
            if(state) ShowMessage("Сетевой кабель подключён");
            else ShowMessage("Сетевой кабель отключен");
            oldstate = state;
        }
        Sleep(100);
    }
}
//---------------------------------------------------------------------------
Так вот если нажать на кнопку BBeginClick, а потом на BRespClick, то ошибки никакой не будет, если сначало нажать BRespClick, то выходит ошибка (см. скриншот).

Как правильно освободится от потока, чтобы не выскакивала ошибка такая как на скриншоте?

Заранее благодарен за ответ
Миниатюры
Правильно завершить поток  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.12.2015, 15:39
Ответы с готовыми решениями:

Как правильно завершить поток
Всем привет. Что я делаю не так ? Поток запускается и работает хорошо, но вот при завершении программы она не закрывается, а зависает. Как...

Завершить поток через 60 секунд
Здравствуйте, подскажите как завершить поток через 60 секунд ? Поток создаю так: DWORD WINAPI TestThread(LPVOID lpParameter) { ...

Как правильно завершить приложение?
Close(); //или Application-&gt;Terminate(); как правильно?

8
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
29.12.2015, 15:49
Цитата Сообщение от Sasha Посмотреть сообщение
Как правильно освободится от потока
А правильно ли это? указывать Thread->Terminate(); когда еще поток не создан (new MyTime), - только объявлен (MyTime *Thread;)?
1
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
29.12.2015, 16:38  [ТС]
Не правильно

Добавлено через 37 минут
А как коректно проверить создан или работает, чтобы его отключить?
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
29.12.2015, 16:40
Я считаю, что Thread не нулевое значение, когда его успешно создали. Сразу после объявления там зеро... .
1
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
29.12.2015, 17:04  [ТС]
Странно изначально был глюк, потом перекомпелировал полностью и получилось.
Честно говоря меня смутила вот эта строка
C++
1
MyTime *Thread;
Поэтому много вопросов и возникло
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
29.12.2015, 17:15
.. я стараюсь не давать общеупотребительные (банальные д.с, без индексов) имена своим переменным. И думаю - это правильно.
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
31.12.2015, 00:54
C++
1
2
3
4
5
void __fastcall TForm1::BBeginClick(TObject *Sender)
{
Thread = new MyTime(false);
Thread->FreeOnTerminate = false;
}
Логически не верно устанавливать свойства потока после его запуска.

C++
1
ShowMessage("Сетевой кабель подключён");
Из потока??
Кто будет удалять класс потока после его завершения?
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
01.01.2016, 16:58  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
Из потока??
Avazart, я не понял вопроса?
0
Марсианин)))
713 / 46 / 15
Регистрация: 18.07.2010
Сообщений: 637
02.01.2016, 17:00
Цитата Сообщение от Sasha Посмотреть сообщение
Avazart, я не понял вопроса?
Надо через синхронизацию это выполнять.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.01.2016, 17:00
Помогаю со студенческими работами здесь

Как правильно отправить в поток?
Приветы всем. Помогите разобраться с потоками на простом примере. Ситуация бывает такая, при открытии большого количества файлов,...

Как правильно завершить поток QThread и выйти из него?
Здравствуйте, форумчане! Есть GUI-приложение, кнопка в окне приложения запускает цикл обмена данными с com-портом. Цикл длительный так...

Как правильно завершить поток, который лочит мьютекс в цикле?
Есть поток, созданный посредствам CreateThread, который в цикле лочит именной мьютекс, ну типа while(1) { OpenMutex(MUTEX_ALL_ACCESS,...

Как завершить поток
Как завершить поток, начатый _beginthread( Thread, 0, NULL );

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru