Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 12.04.2009
Сообщений: 18

Закрывается поток

01.08.2013, 10:41. Показов 2037. Ответов 9
Метки нет (Все метки)

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

В программе создаю вспомогательный поток для обработки информации следующим образом:
C++
1
DataProcess1=new dataprocessing(false);
Поток работает 15-17 часов и закрывается. Мне необходимо установить причину закрытия потока. Для этого сделал следующее:

1) Установил в функции Execute try{} catch. Подскажите, пожалуйста, возможно ли текст Исключения записывать в файл? Если да, то как это сделать?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 void __fastcall dataprocessing::Execute()
{
  try
   {
   do
   {
    ......
         Sleep(5);
   }
   while (!Terminated);
  }
 catch (Exception &EE)
  {
   Application->ShowException(&EE);
  }
}
2) В функции обработки события OnTerminate хочется получить DataProcess1->FatalException в виде текста исключения и записать его в файл. Подскажите, пожалуйста, как это сделать? (Как преобразовать FatalExeption в переменную для записи в файл)

3) Так же по таймеру пытаюсь вызвать функцию GetExitCodeThread().
C++
1
2
3
4
DWord ExCode;
if( GetExitCodeThread(HTh1,&ExCode))
 if(ExCode!=STILL_ACTIVE)
   File1<<IntToStr(ExCode).c_str();
HTh1 получаю так:
C++
1
2
3
4
5
_fastcall dataprocessing::dataprocessing(bool CreateSuspended)
   : TThread(CreateSuspended)
{
 Form1->HTh1=GetCurrentThread();
}
При этом по таймеру получаю, что даже после закрытия потока ExCode равен STILL_ACTIVE. Что я делаю неправильно? Подскажите, пожалуйста, где можно получить список значений ExCode с описанием их значений?

Заранее спасибо!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.08.2013, 10:41
Ответы с готовыми решениями:

Как в С++ Builder из 2х потоков рисовать на форме квадратики(это первый поток рисует) и кружочки (2ой поток))
Помогите пожалуйсмта))))) Как в С++ Builder из 2х потоков рисовать на форме квадратики(это первый поток рисует) и кружочки (2ой поток))

Не закрывается поток
Во время работы дополнительного потока закрываю программу крестиком сверху справа и закрывается главныи поток тока ,а 2 поток продолжает...

Не закрывается поток?
как закрыть поток в с#? название_потока.Close(); говорит ошибка

9
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
01.08.2013, 10:56
Да если у тебя кривой код, отлов исключений вряд ли поможет.
0
0 / 0 / 0
Регистрация: 12.04.2009
Сообщений: 18
01.08.2013, 11:02  [ТС]
А GetExitCodeThread поможет??

Как мне выявить ошибку??
И все же можно исключения в файл записать?
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
01.08.2013, 11:05
Цитата Сообщение от KIG Посмотреть сообщение
Как мне выявить ошибку??
Код смотреть и анализировать чего так может происходить...
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
01.08.2013, 11:08
Цитата Сообщение от KIG Посмотреть сообщение
хочется получить DataProcess1->FatalException в виде текста исключения и записать его в файл. Подскажите, пожалуйста, как это сделать?
Просто добавить на форму компонент ApplicationEvents и на его событие OnException написать такой код:__
C++
1
2
3
4
5
6
7
8
void __fastcall TForm1::ApplicationEvents1Exception(TObject *Sender,
      Exception *E)
{
    TStringList *slist = new TStringList();
    slist->Add(E->Message);
    slist->SaveToFile("myWork.log");
    delete slist;
}
1
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33398 / 21508 / 8236
Регистрация: 22.10.2011
Сообщений: 36,906
Записей в блоге: 12
01.08.2013, 11:13
nick42, а кто тебе сказал, что исключение, выброшенное в одном потоке, как-то повлияет на OnException другого потока?

И кто вообще сказал, что причина завершении потока - исключительная ситуация? Может, там код возврата функции надо анализировать, а не исключения ловить? Без кода потока - это чистой воды гадание на кофейной гуще...
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
01.08.2013, 11:15
никто. Просто я так делаю, когда делю на нуль...
1
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33398 / 21508 / 8236
Регистрация: 22.10.2011
Сообщений: 36,906
Записей в блоге: 12
01.08.2013, 11:17
Значит, неправильно делаешь, и надо читать про исключения и особенности их работы в многопоточном приложении, а не советовать заведомо неверный метод другим.
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
01.08.2013, 11:23
но метод хороший; я и поделился.
Каюсь, - в суть проблемы ТС не вникал.

Добавлено через 4 минуты
П.С. .. и потом: потоки-потоками - но аппликэйшн-то один? Или что мне почитать по этому поводу...?
0
0 / 0 / 0
Регистрация: 12.04.2009
Сообщений: 18
01.08.2013, 12:44  [ТС]
С исключениями разобрался.

Остался вопрос с GetExitCodeThread. Почему не работает, подскажите, пожалуйста.

Может быть еще использовать функцию GetLastError()?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.08.2013, 12:44
Помогаю со студенческими работами здесь

Threads: поток не закрывается
Доброго времени суток, прочитал кучу форумов, но так и не нашел ничего полезного, помогите решить проблему. Задача: Есть программа с...

Файловый поток не закрывается
StreamReader dict = File.OpenText(&quot;dict.txt&quot;); ... dict.Close(); w = new StreamWriter(&quot;dict.txt&quot;, true); на строке w = new...

Не закрывается поток созданный в другом классе
Здравствуйте, подскажите пожалуйста как грамотно отключать поток из form,. у меня даже после закрытия формы потоки продолжают слать смски ...

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

Почему при Thread.Abort закрывается программа? Как остановить поток?
Есть класс для инвертирования движения мыши. При вызове метода Stop программа продолжает работать. При применении Abort прога закрывается....


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru