Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обучение: пишем прогу с интерфейсными потоками, Обучающий пример.... 
:(
    Опции темы
Step
Дата 28.7.2003, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Предлагаю всем желающим пример написания программы с интерфесными потоками на МFC

Задача: написания программы с интерфесными потоками.
1. Создаем остовое приложения "диалог"... это основной поток (процесс);
на окно помещаем кнопку Старт - которая будет запускать потоки.
2. Создаем класс производный от СWinThread
в меню insert выбираем New Class,
вводим имя класса "Thread",
выбираем базовый класс СWinThread,
жмем ОК.
3. Создаем диалоговое окно интерфейсного потока
в данном примере мы создаем окно с полевом ввода и кнопко ОК
вызываем СlassWizard он предлагает создать новый класс, соглашаемся.
выбираем имя класса СDialogI и жмем ОК.
переходим на закладку Member Variables и связываем с полем ввода переменную m_i типа int;


написание кода
1. Класс СDialogI
Код
BOOL СDialogI::OnInitDialog()
{
CDialog::OnInitDialog();

// TODO: Add extra initialization here
SetTimer(1,1000,NULL);
return TRUE;  // return TRUE unless you set the focus to a control
              // EXCEPTION: OCX Property Pages should return FALSE
}


Код
void СDialogI::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
UpdateData();
m_i++;
UpdateData(FALSE);

CDialog::OnTimer(nIDEvent);
}

2. Класс Thread
добавляем в файл Thread.h строчку #include "dialogi.h"
Код
#if !defined(AFX_W_H__7BBD4BB8_40E5_11D6_9DA2_CF7983DF0C56__INCLUDED_)
#define AFX_W_H__7BBD4BB8_40E5_11D6_9DA2_CF7983DF0C56__INCLUDED_

#include "dialogi.h"
#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000



пишем код InitInstance()

Код
BOOL Thread::InitInstance()
{
// TODO:  perform and per-thread initialization here
AfxEnableControlContainer();
СDialogI dlg;
m_pMainWnd = &dlg;
int nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
}
else if (nResponse == IDCANCEL)
{
}
return TRUE;
}

3. Основной поток
переходим на основное диалоговое окно и на добавленной кнопке делаем двойной щелчок
в появившемся окне жмем ОК и начинаем писать код в функции связанной с кнопкой....
Код
AfxBeginThread(RUNTIME_CLASS(Thread));

в файл pr2Dlg.h добовляем строчку #include "thread.h"
Код

#if !defined(AFX_PR2DLG_H__7BBD4BA8_40E5_11D6_9DA2_CF7983DF0C56__INCLUDED_)
#define AFX_PR2DLG_H__7BBD4BA8_40E5_11D6_9DA2_CF7983DF0C56__INCLUDED_

#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
#include "thread.h"

Программа готова... запускаем, и жмем кнопку старт в нашем окне.

При каждом нажатие кнопки Старт, в появившеся окне начинает, каждую секунду, увеличиваться число в поле ввода.
Все появившееся окна работают независимо, и числа в них меняються независимо.




Программа проверена и работает, если вам что-то не понятно спрашывайте


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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