Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.03.2012, 07:11   #1
alexey_kip
Форумчанин
 
Регистрация: 19.11.2011
Сообщений: 198
Радость Зависание

Работаю в VS 6, проект MFC добавляю листбокс и прогресс бар, делаю цикл, который добавляет в листбокс 1млн. чисел. Первые несколько секунд программа считает, потом компьютер начинает "думать", что программа зависла, хотя на самом деле - нет.
Как можно избавиться от такой проблемы?
alexey_kip вне форума Ответить с цитированием
Старый 31.03.2012, 07:15   #2
alexey_kip
Форумчанин
 
Регистрация: 19.11.2011
Сообщений: 198
По умолчанию

В конце концов он результат выводит, но пока вычисляет - программа считается зависшей
alexey_kip вне форума Ответить с цитированием
Старый 31.03.2012, 08:20   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

От такой проблемы можно избежать используя потоки.
Научись работать в Си с потоками и будет тебе счастье.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 31.03.2012, 08:46   #4
alexey_kip
Форумчанин
 
Регистрация: 19.11.2011
Сообщений: 198
По умолчанию

А чуть конкретнее можно? С какими потоками?
alexey_kip вне форума Ответить с цитированием
Старый 31.03.2012, 09:36   #5
alexey_kip
Форумчанин
 
Регистрация: 19.11.2011
Сообщений: 198
По умолчанию

на AfxBeginThread(MyFunction, NULL);
выдает ошибку error C2665: 'AfxBeginThread' : none of the 2 overloads can convert parameter 1 from type 'unsigned int (void *)'
alexey_kip вне форума Ответить с цитированием
Старый 31.03.2012, 12:51   #6
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Есть другой вариант - обрабатывать сообщения ОС во время выполнения расчетов. Не так, конечно, фэншуйно, как с потоками, и отчасти коряво, но все-таки проще в реализации. В билдере (и вообще в библиотеке VCL, что родом из дельфей) для этого есть функция-член класса TApplication - ProcessMessages(). В MFC такого нет, но гугль выдал такой вариант замены:
Код:
void DoProcessMessages(void){
 while (true)
 {
	MSG m_msgCur;	
	while (!::PeekMessage(&m_msgCur, NULL, NULL, NULL, PM_NOREMOVE)) 
	{
		return;
	}
	if (!::GetMessage(&m_msgCur, NULL, NULL, NULL)) break;
	::TranslateMessage(&m_msgCur); 
	::DispatchMessage(&m_msgCur);
 }
}
Соответственно, вставлять в код расчетов, скажем, каждые 1000 или 10.000 итераций.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 31.03.2012, 16:27   #7
alexey_kip
Форумчанин
 
Регистрация: 19.11.2011
Сообщений: 198
По умолчанию

Спасибо, работает, но если запустить на выполнение программу и закрыть, то она висит в процессах
alexey_kip вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Зависание программы. kardinal94 Общие вопросы Delphi 2 23.08.2010 17:36
Зависание компьютера RockForr Компьютерное железо 10 19.08.2010 11:46
зависание DeDoK Работа с сетью в Delphi 7 17.08.2010 09:56
Непонятное зависание. DIMANJ Операционные системы общие вопросы 20 18.11.2009 17:08
Зависание JRcoker Общие вопросы Delphi 8 06.08.2008 08:29