文件名称:用vc编写简单操作系统教程
文件大小:69KB
文件格式:RAR
更新时间:2012-04-09 13:32:20
vc
用vc编写操作系统,你也可以做的到 CCriticalSection csDocLock; //文件锁保证读写互斥 CCriticalSection csReadCount; //读者记数互斥 CCriticalSection csPreWriteLock;//写者优先锁 int g_iReadCount = 0; bool g_bPreWriter= false; //写者优先标志 HANDLE hReadSemaphore=CreateSemaphore(NULL,3,3,"Semaphore1.object");//读者信号量 共允许3个读者同时进行 //线程体 bool who[3]={false}; DWORD WINAPI ReaderThreadFun(PVOID param) { CReader_WriterDlg * pWnd=(CReader_WriterDlg *)param; int iStep = 0; //申请信号量 if(g_bPreWriter)//写者优先锁 csPreWriteLock.Lock(); csReadCount.Lock(); g_iReadCount++; if(g_iReadCount==1) csDocLock.Lock();//锁定文件,保证不能写 csReadCount.Unlock(); ::WaitForSingleObject(hReadSemaphore,-1); if(g_bPreWriter)//写者优先锁 csPreWriteLock.Unlock(); //此处换算当前线程与对话框的哪个ProgressBAR控件关联 DWORD id; //要求4个读者进度条控件的ID顺序排列 int cur; //who[4]的元素与4个控件一一对应,某个下标对应的元素为true //,表示对应的进度条正在模拟中,模拟完成后,将其 //恢复为false,允许别的读者线程"占用"对应的控件,进行 //模拟 for(cur=0;cur<3;cur++) { if(!who[cur]) //找到第一个为false的下标cur { who[cur]=true; //一旦找到,将其置为true id=IDC_PROGRESS2+cur; //得到对应的进度条控件ID号 break; } } //模拟读者 while(iStep<10) { for(int i=0;i<10000;i++) { for(int j=0;j<1000;j++) ;//虚动作 } pWnd->SendMessage(WM_MSG_READER,(DWORD)iStep,id); iStep++; } //释放信号量 who[cur]=false; ::ReleaseSemaphore(hReadSemaphore,1,NULL); //判断是否所有读者均读完 csReadCount.Lock(); g_iReadCount--; if(g_iReadCount==0) { csDocLock.Unlock(); } csReadCount.Unlock(); return 0; }
【文件预览】:
cvery.comvc61566882477
----下载说明.htm(5KB)
----mypic2.GIF(4KB)
----Reader_Writer.rar(32KB)
----稿件模板.htm(6KB)
----mypic3.GIF(5KB)
----mypic1.GIF(24KB)