Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обмен данными с диалогом ... ... при циклических операциях. 
:(
    Опции темы
Larry
  Дата 14.11.2007, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ленивый донгловед



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 16.9.2007
Где: Россия

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



Имеется циклическая операция  подобного вида:

Код
for (int i = 0; i <= 65535; i++)
{
    for (int j = 0; j <= 65535; j++)
   {
       ext_func(i, j, &rez);
       
       if (rez == 0)
           ...
   }
}

Во время выполнения операции необходимо, чтобы значения переменных i и j отображались в компонентах CEdit1 и CEdit2 соответственно.

Вопрос: как сделать так, чтобы во время выполнения циклической операции, диалоговое окно отображало его состояние? В Delphi данная проблема решалась вставкой  в конец цикла процедуры Application.ProccessMessages();. Есть ли подобный аналог в MFC?

Заранее благодарен за ответ...

Это сообщение отредактировал(а) Larry - 28.11.2007, 09:25
PM MAIL WWW   Вверх
zkv
Дата 14.11.2007, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 16
Всего: 92



Цитата(Larry @  14.11.2007,  11:07 Найти цитируемый пост)
как сделать так, чтобы во время выполнения циклической операции, диалоговое окно отображало его состояние?

вычисления запускать в потоке (_beginthread)

Цитата(Larry @  14.11.2007,  11:07 Найти цитируемый пост)
Есть ли подобный аналог в MFC?

даже если есть использовать бы не стал, потому что костыль.
вообще где то обсуждалось, наверное GetMessage()/DispatchMessage() поможет, но лучше поток
PM MAIL   Вверх
Larry
  Дата 14.11.2007, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ленивый донгловед



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 16.9.2007
Где: Россия

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



Цитата(zkv @ 14.11.2007,  11:14)
вычисления запускать в потоке (_beginthread)

Если можно, приведите пример, как реализовать функцию в потоке, которая бы имела возможность менять текст диалога CEdit (я плохо разбираюсь в MFC)?

Заранее благодарен...
PM MAIL WWW   Вверх
DigitSphinx
Дата 14.11.2007, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 28.4.2007
Где: Москва

Репутация: нет
Всего: 3



вот тебе и ProccessMessages
Код

void ProccessMessages(void)
{
    MSG msg;
    while (PeekMessage(&msg, 0, 0, 0, PM_REMOVE))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
}

но через поток грамотнее
вот как может выгладить функция потока
Код

UINT ThreadProc(LPVOID lParam)
{
    CMyMegaSuperPuperDialog & DLG = *((CDialog *) lParam);
    while(true)
        DLG->…………//это и есть твой диалог
    return 0;
}

а вызвать эту ф-ю можно так
Код

CWinThread * m_CWinThread = AfxBeginThread(ThreadProc, this);

а убить так
Код

TerminateThread(m_CWinThread->m_hThread, 0);




--------------------
Чтобы пробить стену лбом нужен или большой разбег, или много лбов.
(Альберт Эйнштейн)
Умен ты или глуп, велик ты или мал, не знаем мы, пока ты слова не сказал.
(Альберт Эйнштейн)
user posted image
PM MAIL ICQ   Вверх
Larry
  Дата 28.11.2007, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ленивый донгловед



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 16.9.2007
Где: Россия

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



Цитата(DigitSphinx @ 14.11.2007,  16:47)
вот как может выгладить функция потока
Код

UINT ThreadProc(LPVOID lParam)
{
    CMyMegaSuperPuperDialog & DLG = *((CDialog *) lParam);
    while(true)
        DLG->…………//это и есть твой диалог
    return 0;
}

а вызвать эту ф-ю можно так ...

Не получается.

У меня есть переменные связанные с объектами моего диалога. Можно вызвать поток так, чтобы эти переменные можно было использовать? По примеру выше не выходит.
PM MAIL WWW   Вверх
SenkraD
Дата 28.11.2007, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 4
Всего: 23



Larry, сделай процедуру потока статическим методом класс и сможеш


--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




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


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

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