Отправляет email-рассылки с помощью сервиса Sendsay

Статьи по Visual C++

  Все выпуски  

Статьи по Visual C++.NET События


Информационный Канал Subscribe.Ru

P-Lib - сайт по программированию Ozon.ru
  Главная | Новости | Статьи | Каталог | Регистрация | Поиск

Новые статьи

1. Обработка команд меню
2. Back Door на Visual C++
3. Создание потоков (MFC)
4. Подключен ли компьютер к интернету
5. Перечисление всех модулей для процесса
6. Отслеживание системных событий
7. Рисуем меню сами
8. Поиск ресурсов в локальной сети
9. Доступ к ресурсам локальной сети

Свежие компьютерные новости

11.12.2005 Новый сервис Google поможет точно спланировать поездку
11.12.2005 Чипсет VIA CN700 IGP со встроенной графикой для процессоров C7
11.12.2005 МР3-плеер Samsung с поддержкой спутникового радио
11.12.2005 В IE7 будет изменена схема работы зон безопасности
10.12.2005 Модули памяти Samsung FB-DIMM ёмкостью 8 Гб

События

Событие является объектом, очень похожим на семафор, но в несколько видоизмененном виде. Рассмотрим функции для работы с событиями.

CreateEvent – создаёт объект-событие.

HANDLE CreateEvent
(
 LPSECURITY_ATTRIBUTES lpEventAttributes,
 BOOL bManualReset,
 BOOL bInitialState,
 LPCTSTR lpName
)

Параметры функции описаны ниже.

Первый парамтр – имеет тот же смысл, что и первый параметр функции CreateSemaphor. Обычно пологается равным NUUL.

Второй параметр – если параметр не равен нулю, то событие может быть сброшено при помощи функции ResetEvent. Иначе событие сбрасывается при доступе к нему какого либо процесса.

Третий параметр – если параметр равен 0, то событие инициализируется как сброшенное, в противном случае сразу же подаётся сигнал о наступлении соответствующей ситуации.

Четвёртый параметр – указатель на строку, которая содержит имя события.

Ожидание события осуществляется, как и в случае с семафором, функцией WaitForSingleObject.

Функция OpenEvent аналогична функции OpenSemaphor.

SetEvent – подать сигнал о наступлении события.

BOOL SetEvent
(
 HANDLE hEvent
)

Параметры функции: первый параметр – дескриптор события.

Вот пример:

// TestEvent.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "windows.h"
#include "iostream.h"
#include "process.h" 

HANDLE event;

void Test1(void *);
void Test2(void *);
void Test3(void *);

void main()
{
 event=CreateEvent(NULL,TRUE,FALSE,"FirstStep");
 if (_beginthread(Test1,1024,NULL)==-1)
  cout << "Error begin thread " << endl;
 if (_beginthread(Test2,1024,NULL)==-1)
  cout << "Error begin thread " << endl;
 if (_beginthread(Test3,1024,NULL)==-1)
  cout << "Error begin thread " << endl;
 if (event!=NULL)
 {
  Sleep(1000);
  SetEvent(event);
  Sleep(1000);
  ResetEvent(event);
  CloseHandle(event);
 } 
 else 
 {
  cout << "error create event" << endl;
 }

}

void Test1(void *)
{
 DWORD dwWaitResult;
 while(dwWaitResult!=WAIT_OBJECT_0) 
 {
  dwWaitResult = WaitForSingleObject(event,1);
  cout << "Test 1 TIMEOUT" << endl;
 }
 cout << "Event Test 1 " << endl;
 _endthread();
}

void Test2(void *)
{
 DWORD dwWaitResult;
 while(dwWaitResult!=WAIT_OBJECT_0)
 {
  dwWaitResult = WaitForSingleObject(event,1);
  cout << "Test 2 TIMEOUT" << endl;
 }
 cout << "Event Test 2 " << endl;
 _endthread();
}

void Test3(void *)
{
 DWORD dwWaitResult;
 while(dwWaitResult!=WAIT_OBJECT_0)
 {
  dwWaitResult = WaitForSingleObject(event,1);
  cout << "Test 3 TIMEOUT" << endl;
 }
 cout << "Event Test 3 " << endl;
 _endthread();
}

Создает объект Event, запускает три потока. Каждый поток ждет когда объект синхронизации перейдет в сигнальное состояние. После некоторой задержки устанавливаем его в сигнальное состояние SetEvent(), выжидаем некоторое время, чтобы потоки среагировали и сбрасываем ResetEvent(). Обратите внимание, что в данном случае в отличии от всех других объектов синхронизации потоков может быть любое количество.




Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.visualc
Архив рассылки
Отписаться
Вспомнить пароль

В избранное