91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

資源簡介

實現多線程讀寫緩沖區的小例子。一個任務讀文件并寫入緩沖區,一個任務從緩沖區讀內容寫到文件,緩沖區可循環。讀大文件請稍微改下緩沖區大小。

資源截圖

代碼片段和文件信息

#include?
#include?“windows.h“
#include?“conio.h“
#include?“stdio.h“
#include?“time.h“

char?buff[20]={‘\0‘}; //緩沖區
int?max?=?20; //緩沖區大小
int?wlog=0; //寫指針
int?rlog=0; //讀指針
int?sign=0; //文件讀完停止標志
HANDLE?g_hMutex; //互斥量

/*
?*?寫入buffer接口
?*?每次寫入一個字符
?*/
void?PutToBuffer(char?*p)
{
WaitForSingleobject(g_hMutex?INFINITE);
//寫入緩沖區
buff[wlog]=*p;
//寫的位置+1
if(wlog?==?(max-1))
wlog=0;
else
wlog++;
ReleaseMutex(g_hMutex);
}

/*
?*?讀取buffer接口
?*?每次讀一個字符
?*?讀過的位置置0
?*/
void?GetBuffer()
{
//讀,并且寫入目標文件
WaitForSingleobject(g_hMutex?INFINITE);
buff[rlog]=‘\0‘;

//寫的位置+1
if(rlog?==?(max-1))
rlog=0;
else
rlog++;
ReleaseMutex(g_hMutex);
}

/*
?*?寫buffer線程
?*/
void?write()
{
//打開文件
char?ch; //每次讀取的一個字節
FILE?*fp?=?NULL;
if(!(fp?=?fopen(“a.txt““r“)))
printf(“打開源文件出錯了!\n“);
else
{
//按字節讀文件
while((ch?=?fgetc(fp))!=EOF )
{
//緩沖區寫滿,循環寫追尾了的情況
while(wlog==rlog?&&?buff[wlog]!=‘\0‘)
{
printf(“緩沖區滿,寫線程等待...?...\n“);
Sleep(500);
}
//寫入緩沖區
PutToBuffer(&ch);
}
}
fclose(fp);
sign=0; //文件全部取完,更改標志,通知讀線程
}

/*
?*?讀buffer線程
?*/
void?read()
{
FILE?*fp?=?NULL;
if(!(fp?=?fopen(“result.txt““w“)))
{
printf(“打開目標文件出錯了!\n“);
}
else
{
while(1)
{
/*?當讀寫指針重合,兩種可能
?*?一種:緩沖區空。等待寫線程寫入,或者已結束。
?*?一種:緩沖區滿,讀
?*/
if(wlog==rlog?&&?buff[rlog]==‘\0‘)
{
if(sign)
{
//沒有結束,等待寫線程寫入
printf(“緩沖區空,文件還沒有寫完,讀線程等待...?...\n“);
Sleep(1000);
}
else
{
//已經結束,無需等待了
printf(“\n?-----完成!緩沖區空-----?\n“);
break;
}
}
else
{
//讀,并且寫入目標文件
fputc(buff[rlog]fp);
GetBuffer();
}
}
}
fclose(fp);
}
int?tStop()??
{
getch();???????????????????????????
return?11;???????
}
void?main()
{
int?m;
sign=1;
g_hMutex?=?CreateMutex(NULL?FALSE?NULL);

HANDLE?ahThread=CreateThread(NULL0(LPTHREAD_START_ROUTINE)writeNULL0NULL);
Sleep(500);
HANDLE?bhThread=CreateThread(NULL0(LPTHREAD_START_ROUTINE)readNULL0NULL);
m=tStop();
if(m==11)???????
{
CloseHandle(ahThread);
CloseHandle(bhThread);
printf(“\n-----Close?Thread?Success-----\n“);?
}
}

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----

?????文件?????????40??2015-08-18?10:36??多線程\multithread\a.txt

?????文件?????192586??2015-07-30?17:31??多線程\multithread\Debug\multithread.exe

?????文件?????207816??2015-07-30?17:31??多線程\multithread\Debug\multithread.ilk

?????文件??????17948??2015-07-30?17:31??多線程\multithread\Debug\multithread.obj

?????文件?????500736??2015-07-30?17:31??多線程\multithread\Debug\multithread.pdb

?????文件??????????0??2015-08-06?09:42??多線程\multithread\Debug\result.txt

?????文件?????140288??2015-07-30?17:31??多線程\multithread\Debug\vc60.idb

?????文件??????77824??2015-07-30?17:31??多線程\multithread\Debug\vc60.pdb

?????文件???????2520??2015-07-30?17:31??多線程\multithread\multithread.cpp

?????文件???????3461??2015-07-30?17:28??多線程\multithread\multithread.dsp

?????文件????????528??2015-07-30?17:31??多線程\multithread\multithread.dsw

?????文件??????50176??2015-07-30?17:31??多線程\multithread\multithread.ncb

?????文件??????48640??2015-07-30?17:31??多線程\multithread\multithread.opt

?????文件???????1183??2015-07-30?17:31??多線程\multithread\multithread.plg

?????文件??????????6??2015-07-30?17:31??多線程\multithread\result.txt

?????目錄??????????0??2015-08-06?09:06??多線程\multithread\Debug

?????目錄??????????0??2015-07-31?09:28??多線程\multithread

?????目錄??????????0??2015-08-06?09:43??多線程

-----------?---------??----------?-----??----

??????????????1243752????????????????????18


評論

共有 條評論