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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.02.2012, 18:06   #1
Kukurudza
Форумчанин
 
Регистрация: 02.06.2011
Сообщений: 282
По умолчанию MFC зависание программы

внутри функции для кнопки вызывается другая функция (очень емкая по вычислениям). эта функция работает правильно. результат выдается верно, через несколько минут. проблема в том, что окно при этом затеняется и винда типа говорит что программа не отвечает. оно и верно, так как программа занята вычислениями и не может обрабатывать сообщения от винды. вот код:
Код:

void CProjectDlg::OnBnClickedButtonCreateShifr()
{	switch(m_rRadio1)
	{
		case 0:
		{ CryptoSimpleExchange(); break; };
	};
};
как сделать так, чтобы пользователю "не казалось" что программа зависла? можно функцию CryptoSimpleExchange отправить на выполнения какому нибудь дочернему процессу, причем так, чтобы сообщения от винды обрабатывались нормально и она "не зависала"?
Kukurudza вне форума Ответить с цитированием
Старый 17.02.2012, 18:23   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

читает про многопоточность.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 17.02.2012, 18:51   #3
Kukurudza
Форумчанин
 
Регистрация: 02.06.2011
Сообщений: 282
По умолчанию

прочитал вот такой код:
Код:
void CProjectDlg::CryptoSimpleExchange( void* pParams )
{
	//здесь много чего то считаем
	_endthread();
};
void CProjectDlg::OnBnClickedButtonCreateShifr()
{
	switch(m_rRadio1)
	{
		case 0:
		{
			_beginthread( CryptoSimpleExchange, 0, NULL );
			break;
		};
	};
};
но он не компилится:
Error 3 error C3867: 'CProjectDlg::CryptoSimpleExchange' : function call missing argument list; use '&CProjectDlg::CryptoSimpleExchange ' to create a pointer to member d:\учеба\
Kukurudza вне форума Ответить с цитированием
Старый 17.02.2012, 18:55   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

переведите текст ошибки сами.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 17.02.2012, 18:58   #5
Kukurudza
Форумчанин
 
Регистрация: 02.06.2011
Сообщений: 282
По умолчанию

в функции отсутствует список аргументов. все правильно. аргументов то у меня там нет
Kukurudza вне форума Ответить с цитированием
Старый 17.02.2012, 20:04   #6
crymchanin
Пользователь
 
Аватар для crymchanin
 
Регистрация: 01.02.2012
Сообщений: 84
По умолчанию

http://msdn.microsoft.com/ru-ru/libr...vs.100%29.aspx
crymchanin вне форума Ответить с цитированием
Старый 17.02.2012, 20:10   #7
microbit
Форумчанин
 
Аватар для microbit
 
Регистрация: 26.09.2011
Сообщений: 176
По умолчанию

можно проверять есть ли сообщения windows в очереди, обрабатывать их останавливая функцию.
microbit вне форума Ответить с цитированием
Старый 17.02.2012, 20:15   #8
Kukurudza
Форумчанин
 
Регистрация: 02.06.2011
Сообщений: 282
По умолчанию

спасибо почитаю.
microbit, вот это мне очень даже подходит
Kukurudza вне форума Ответить с цитированием
Старый 17.02.2012, 21:41   #9
microbit
Форумчанин
 
Аватар для microbit
 
Регистрация: 26.09.2011
Сообщений: 176
По умолчанию

это на winapi
Код:
MSG Msg;
if(PeekMessage(&Msg,m_hWnd,0,0,PM_REMOVE))
{ 
    TranslateMessage(&Msg);
    DispatchMessage(&Msg);
}
возможно на mfc есть специальный метод, не знаю.
нужно ещё ввести защиту от повторного запуска функции, ну и возможность завершить функцию.
microbit вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Зависание программы при выходе codermoder Работа с сетью в Delphi 6 18.12.2010 23:16
Зависание программы с потоком casper0094 Общие вопросы Delphi 4 25.08.2010 22:49
Зависание программы. kardinal94 Общие вопросы Delphi 2 23.08.2010 17:36
CriticalSection -> зависание программы PUH Помощь студентам 1 05.11.2009 13:19