xxxx18一60岁hd中国/日韩女同互慰一区二区/西西人体扒开双腿无遮挡/日韩欧美黄色一级片 - 色护士精品影院www

資源簡(jiǎn)介

實(shí)現(xiàn)多線(xiàn)程讀寫(xiě)緩沖區(qū)的小例子。一個(gè)任務(wù)讀文件并寫(xiě)入緩沖區(qū),一個(gè)任務(wù)從緩沖區(qū)讀內(nèi)容寫(xiě)到文件,緩沖區(qū)可循環(huán)。讀大文件請(qǐng)稍微改下緩沖區(qū)大小。

資源截圖

代碼片段和文件信息

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

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

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

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

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

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

/*
?*?讀buffer線(xiàn)程
?*/
void?read()
{
FILE?*fp?=?NULL;
if(!(fp?=?fopen(“result.txt““w“)))
{
printf(“打開(kāi)目標(biāo)文件出錯(cuò)了!\n“);
}
else
{
while(1)
{
/*?當(dāng)讀寫(xiě)指針重合,兩種可能
?*?一種:緩沖區(qū)空。等待寫(xiě)線(xiàn)程寫(xiě)入,或者已結(jié)束。
?*?一種:緩沖區(qū)滿(mǎn),讀
?*/
if(wlog==rlog?&&?buff[rlog]==‘\0‘)
{
if(sign)
{
//沒(méi)有結(jié)束,等待寫(xiě)線(xiàn)程寫(xiě)入
printf(“緩沖區(qū)空,文件還沒(méi)有寫(xiě)完,讀線(xiàn)程等待...?...\n“);
Sleep(1000);
}
else
{
//已經(jīng)結(jié)束,無(wú)需等待了
printf(“\n?-----完成!緩沖區(qū)空-----?\n“);
break;
}
}
else
{
//讀,并且寫(xiě)入目標(biāo)文件
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“);?
}
}

?屬性????????????大小?????日期????時(shí)間???名稱(chēng)
-----------?---------??----------?-----??----

?????文件?????????40??2015-08-18?10:36??多線(xiàn)程\multithread\a.txt

?????文件?????192586??2015-07-30?17:31??多線(xiàn)程\multithread\Debug\multithread.exe

?????文件?????207816??2015-07-30?17:31??多線(xiàn)程\multithread\Debug\multithread.ilk

?????文件??????17948??2015-07-30?17:31??多線(xiàn)程\multithread\Debug\multithread.obj

?????文件?????500736??2015-07-30?17:31??多線(xiàn)程\multithread\Debug\multithread.pdb

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

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

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

?????文件???????2520??2015-07-30?17:31??多線(xiàn)程\multithread\multithread.cpp

?????文件???????3461??2015-07-30?17:28??多線(xiàn)程\multithread\multithread.dsp

?????文件????????528??2015-07-30?17:31??多線(xiàn)程\multithread\multithread.dsw

?????文件??????50176??2015-07-30?17:31??多線(xiàn)程\multithread\multithread.ncb

?????文件??????48640??2015-07-30?17:31??多線(xiàn)程\multithread\multithread.opt

?????文件???????1183??2015-07-30?17:31??多線(xiàn)程\multithread\multithread.plg

?????文件??????????6??2015-07-30?17:31??多線(xiàn)程\multithread\result.txt

?????目錄??????????0??2015-08-06?09:06??多線(xiàn)程\multithread\Debug

?????目錄??????????0??2015-07-31?09:28??多線(xiàn)程\multithread

?????目錄??????????0??2015-08-06?09:43??多線(xiàn)程

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

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


評(píng)論

共有 條評(píng)論

相關(guān)資源