Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Процессор загружается после закрытия программы, Чё к чему?!?! 
:(
    Опции темы
ksili
Дата 16.3.2007, 08:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

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



Заметил, что после закрытия моей программы и до перезагрузки компа загрузка процессора становится 75-85%. Это происходит после первого же запуска проги. Диспетчер задач пишет, что это Бездействие системы. Во время работы программы, как и сразу после перезугрузки компа, загрузка минимальна - единицы процентов.

Тем не менее при такой загрузке комп не тормозит и работает как обычно.

Я подумал, может это от моей программы остаются какие-то потоки, которые почему-то не убиваются после закрытия проги, а продолжают выполняться. В программе создаются два потока, которые работают по принципу бесконечной петли ( while(!Terminated)  {...} ). Если они не закрываются вручную, то это происходит в событии формы OnDestroy:
Код

     if(All_chnls->chnls[i-1].pd)
        {
         TerminateThread((TDispThread*)(All_chnls->chnls[i-1].pd), 0);
         delete All_chnls->chnls[i-1].pd;
         All_chnls->chnls[i-1].pd = NULL;
        }



--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
dumb
Дата 16.3.2007, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


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

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



"Бездействие системы" - вроде как очевидное название?.. тебя должен беспокоить процесс (на вкладке процессы) с именем твоего исполняемого файла. если он после после выхода из программы остается висеть, то значит не завершились твои "простые и легкие" потоки. smile
PM MAIL   Вверх
ksili
Дата 16.3.2007, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

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



Но если "Бездействие системы" - 85%, то график загрузки ЦП должен идти по низу - около 15%. В принципе так и есть до завершения моей программы, но после завершения почему-то резко становится наоборот  smile 

Моего процесса в памяти после выхода из программы не остаётся

Это сообщение отредактировал(а) ksili - 16.3.2007, 10:46


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
ama_kid
Дата 16.3.2007, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


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

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



Для начала - небольшое  уточнение: у тебя стоит в свойствах потока FreeOnTerminate=true? Если стоит, тогда delete All_chnls->chnls[i-1].pd; имхо не только бессмысленный, но и вредный операнд, ибо может обращаться к уже освобожденному участку памяти...

А теперь по делу: попробуй поставить функцию WaitForSingleObject после TerminateThread и посмотри, по какому условию она выходит - если по таймауту - твои "легкие и нежные" потоки потоки не завершают свою работу




--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
ksili
Дата 16.3.2007, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

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



И откуда только у всех столько  smile нежности smile  по отношению к моим потокам?  smile 

FreeOnTerminate=true нету

 WaitForSingleObject щаз попробую

Добавлено @ 12:07 
Чё-то не могу этой функции параметр указать:
Код

DWORD WaitForSingleObject(

    HANDLE hHandle,    // handle of object to wait for 
    DWORD dwMilliseconds    // time-out interval in milliseconds  
   );


Пишу ему так:
Код

WaitForSingleObject(((TDispThread*)(All_chnls->chnls[i-1].pd))->Handle,10000);

Ругается, что wanted 'void*', got 'unsigned int'. Его что ли потом ещё к void* преобразовать? Я уже не уверен тот ли хэндл я ему сую


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
ama_kid
Дата 16.3.2007, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


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

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



ksili
сделай преобразование к (HANDLE) как указано в хелпе, вощем подгони, пока не проглотит - ты ему суешь нормальный хендл (если твой TDispThread - наследник обычного TThread). Кроме того, попытка ведь не пытка? ;-)


--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


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

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


 




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


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

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