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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.02.2013, 20:24   #1
harimambura
Пользователь
 
Регистрация: 05.11.2009
Сообщений: 45
Восклицание MFC поток и диалог

Здравствуйте, форумчане.
Очень нуждаюсь в вашей помощи. вобщем вопрос следующий: необходимо в отдельном потоке отобразить окно диалога модально, при этом из основного потока использовать функции, описанные в классе этого диалога.

пробую делать так (общий вид кода, только основа):

Код:
#include "InformationDlg.h"

CInformationDlg *InfoDlg= new CInformationDlg(L"");
//***************************************************
UINT ThreadProcess( LPVOID pParam )
{
	InfoDlg->DoModal();

	UINT nResult = 1;
	return nResult;
}

void myfunc() 
{
pThread = AfxBeginThread(ThreadProcess, this, THREAD_PRIORITY_NORMAL, 0,0 );
ASSERT(pThread);
InfoDlg->InitProgress2(1,12);
InfoDlg->SetCaption(L"txt");
InfoDlg->SetProgress2(6);
}
в хедере описан CWinThread* pThread;

но после того, как поток запустился, на первой же функции InfoDlg->InitProgress2(1,12); бьет ошибку "an invalid argument was encountered", это в релизе, а в дебаге "Debug Assertion filed! file: f:\sp\vctools\vc7libs\ship\atlmfc\i nclude\afxcmn.inl line:461".
далее выполнение функции myfunc обрывается, хоть диалог и отображается. Что не так?
при наличии претензий перейдите сюда
harimambura вне форума Ответить с цитированием
Старый 05.02.2013, 21:18   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Ну так посмотрите что проверяет assert в указаном месте...
Кроме того, вы хотите обращаться в один объект из двух потоков - вам надо позаботиться о том, чтоб не произходило одновременное обращение (что с учетом DoModal делает все почти невозможным).
waleri вне форума Ответить с цитированием
Старый 05.02.2013, 22:38   #3
harimambura
Пользователь
 
Регистрация: 05.11.2009
Сообщений: 45
По умолчанию

Спасибо за ответ. буду разбираться и пробовать по другому
при наличии претензий перейдите сюда
harimambura вне форума Ответить с цитированием
Старый 05.02.2013, 22:49   #4
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

A зачем вообще нужен поток? По крайней мере в данном случае создает гораздо больше проблем чем решает...
waleri вне форума Ответить с цитированием
Старый 06.02.2013, 00:52   #5
harimambura
Пользователь
 
Регистрация: 05.11.2009
Сообщений: 45
По умолчанию

ну вот так надо. диалог в потоке тупо должен отображать процесс проведения операций, но не давать доступа к основной форме, да и чтоб прогресс бары на нем не тупили в семерке, тоже спасает отдельный поток... поэтому по другому не знаю как сделать
при наличии претензий перейдите сюда
harimambura вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Drag&Drop NO MFC! NO MFC! Антоним Win Api 1 12.11.2012 21:43
Рисование отдельным поток в классе. MFC. GDI+ Tesmont Помощь студентам 0 14.12.2010 11:17
Поток. Не получается создать поток. Выдает ошибки при запуске bigory Общие вопросы по Java, Java SE, Kotlin 3 23.09.2010 00:40
LPVOID и поток в MFC Sasha811 Visual C++ 2 13.07.2009 10:39