www.adept7.kiev.ua
| Форум| Гостевая| Ссылки| Программы| Исходные тексты| Наши партнеры.|
   
| Главная| Рассылки| Услуги| Библиотека| Новости| Авторам| Программистам| Студентам|
delphi c++ assembler
  http://tikitak.narod.ru ---- Главная страница сайта

Шаг 63 - Многозадачность

Создаем проект

Создаем с использованием AppWizard приложение на базе диалогового окна, отключив всё, что можно, на диалоговом окне создать кнопку, процедуру реакции на неё, и реакцию на нажатие клавишей мышки на диалоговом окне. Вы можете посмотреть необходимые операции в предыдущих шагах.

Создаем код

Реакция на нажатие кнопки мыши и необходимые процедуры
UINT proc1(LPVOID Param)
{
	
	for (int x=1;x<30;x++)
	{
          Sleep(100);
	}
   	AfxMessageBox("proc1");
	return 0;
}

UINT proc2(LPVOID Param)
{
	for (int x=1;x<30;x++)
	{
            Sleep(100);
	}
  	AfxMessageBox("proc2");
	return 0;
}

void CTestdiaDlg::OnButton1() 
{
 AfxBeginThread(proc1,this);	
 AfxBeginThread(proc2,this); 
 AfxMessageBox("Thread");
}
Процедура нажатия кнопки на диалоговом окне
void CTestdiaDlg::OnLButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	
	CDialog::OnLButtonDown(nFlags, point);
	MessageBeep(-1);
}

Описание

Основу кода составляет AfxBeginThread. Эта функция запускает процесс. У неё два обязательных параметра , адрес процедуры потока и параметры. Смотрите сами.
CWinThread* AfxBeginThread( AFX_THREADPROC pfnThreadProc, LPVOID pParam, int nPriority = THREAD_PRIORITY_NORMAL, UINT nStackSize = 0, DWORD dwCreateFlags = 0, LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL );
CWinThread* AfxBeginThread( CRuntimeClass* pThreadClass, int nPriority = THREAD_PRIORITY_NORMAL, UINT nStackSize = 0, DWORD dwCreateFlags = 0, LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL );
Указатель на функцию в потоке должен иметь вид
UINT MyControllingFunction( LPVOID pParam );
Второй параметр устанавливает приоритет выполнения функции. Я использовал this для того, чтобы функции потока имели тот же приоритет, что и программа. Но установка этих параметров Ваше право.

Собирайте, запускайте. Если Вы ничего не будете нажимать, то получите примерно следующую картинку.

step63.gif (4979 b)

Смотрите последовательность выполнения. OnButton1 не остановилась на процедурах, а запустила их в виде потоков и выполняется дальше, о чем говорят диалоговые окна Thread, потоки завершаются позднее и примерно в одно время, как и начинались. Запустите еще раз и нажмите на кнопку OK окна сообщения Thread. Вы можете щелкать по диалоговому окну и оно будет откликаться звуком. То есть это говорит о том, что несмотря на то, что код функций еще не закончился окно получает сообщения от мышки и их обрабатывает. Это и есть потоки. Когда выполнение приложения распеределено на несколько направлений, выполнение каждого из которых не зависит от другого. Якобы не зависит. Процессор то один :-))). Но в нашем случае в процедурах реализованы задержки, которые не требуют процессорного времени и влияние друг на друга у них маленькое.


Предыдущий Шаг | Следующий Шаг | Оглавление

By Artem.
Используются технологии uCoz
 

Rambler's Top100 Rambler's Top100

©  Adept Design Studio

Используются технологии uCoz