| Форум| Гостевая| Ссылки| Программы| Исходные тексты| Наши партнеры.|
   
| Главная| Рассылки| Услуги| Библиотека| Новости| Авторам| Программистам| Студентам|
delphi c++ assembler
 

Шаг 9 - Синхронизация файловых операций Mutex.

Задача сводится к тому как заставить две программы работать с одним файлом, когда одна программа может писать, а вторая должна читать. Задача как избежать конфликтов при данной ситуации. Создадим два проекта, как Win32 console, один с именем WriteData, а другой с именем ReadData в каталоге TestMutex. Так будет и в прилагаемом проекте.

Код WriteFile

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

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

void main()
{
HANDLE hShared = CreateMutex(NULL, TRUE, "WriteData"); 	
ofstream ofs("d:\\write.txt");
ofs << "TestDataWrite" << endl;
ofs.close();
int i;
cout << "Press Key and Enter for access to file " << endl;
cin >> i; 
ReleaseMutex(hShared); 
CloseHandle(hShared);
}
Основа программы CreateMutex вот какая она 

HANDLE CreateMutex(  
  LPSECURITY_ATTRIBUTES, // атрибуты
  BOOL bInitialOwner,    // инициализация 
  LPCTSTR lpName         // имя обьекта
); 
Теперь весь этот механизм запускается с помошью ReleaseMutex после использования указатель HANDLE нужно закрыть CloseHandle.

Код ReadData

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

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

void main()
{
HANDLE hShared = OpenMutex(MUTEX_ALL_ACCESS, FALSE, "WriteData"); 
cout << "Wait !!!! Write File Data Proccess " << endl;
WaitForSingleObject(hShared, INFINITE); 
ifstream ifs("d:\\write.txt");
char buffer[100];
ifs >> buffer;
cout << "Read File Data  -  " << buffer << endl;
CloseHandle(hShared);	
}
Для доступа к Mutex теперь его нужно открыть с тем же именем. И поставить флаг MUTEX_ALL_ACCESS. Функция WaitForSingleObject будет стоять пока доступ не будет получен.

Запустите одновременно две программы. Программа чтения будет ждать пока программа записи не разрешит доступ. Вот примерно так как на экране.

9.gif (4757 b)

Введите букву в программу записи и Enter, и программа чтения тут же опомнится и прочитает данные. Вот оно понятие сихронизации. Кстати данный механизм можно применять не только для записи/чтения файлов, но и для любой синхронизации между потоками, программами или еще чем.


Загрузить проект | Предыдущий Шаг | Следующий Шаг | Оглавление

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

Rambler's Top100 Rambler's Top100

©  Adept Design Studio

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