#include <windows.h>
#include <iostream>

using namespace std;

DWORD WINAPI TFunc1(PVOID pvParam)
{
   char* szFileName = (char*)pvParam; // zapisujemy sciezke do pliku

   // watek otwiera zdarzenie
   HANDLE hEvent = OpenEvent(SYNCHRONIZE, FALSE,"Plik istnieje");

   // czeka na pojawienie się zdarzenia
   WaitForSingleObject(hEvent, INFINITE);

   // zdarzenie sie pojawilo
   HANDLE hAnswerFile = ::CreateFile(szFileName, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
   unsigned long ile;
   char * buffer=new char[25];
   ReadFile(hAnswerFile,buffer,24,&ile,NULL);
   cout<<"Jestem watek 1, przeczytalem z pliku: "<<buffer<<endl;
   CloseHandle(hAnswerFile);
   return 0;
}


int main()
{
   HANDLE hThread; // tworzymy watek
   DWORD ThreadID1;
   char* szFileName="C:\\myfile.txt";  // sciezka pliku ktory bedziemy tworzyc

   HANDLE hEvent=CreateEvent(NULL,TRUE,FALSE,"Plik istnieje"); // tworzymy zdarzenie

   // tworzymy dwa wątki jako parametr do funkcji przekazujemy nazwe pliku
   hThread=CreateThread(NULL, 0, TFunc1, szFileName, 0, &ThreadID1);

   // tworzymy plik
   HANDLE hFile=CreateFile(szFileName, GENERIC_WRITE, 0, NULL,CREATE_NEW,FILE_ATTRIBUTE_NORMAL,NULL);
   // wypelniamy plik danymi
   char* buffer="Plik gotowy do dzialania";
   unsigned long ile;
   WriteFile(hFile,buffer,strlen(buffer),&ile,NULL);
   CloseHandle(hFile);
   cout<<"Za chwile powiemy ze mozna uzywac pliku\n\n";
   // sygnalizujemy watkowi ze plik gotowy do uzycia
   SetEvent(hEvent);
   // czekamy az watki swoje zrobia
   WaitForSingleObject(hThread,INFINITE);

   cout<<"\nZamykamy zdarzenie...\n\n";
   ResetEvent(hEvent);
   system("PAUSE");

   return 0;
}
//---------------------------------------------------------------------------
