资源简介
实现多线程读写缓冲区的小例子。一个任务读文件并写入缓冲区,一个任务从缓冲区读内容写到文件,缓冲区可循环。读大文件请稍微改下缓冲区大小。

代码片段和文件信息
#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
相关资源
- I2C读写AT24C02 基于STM32F103 cube116540
- 用Beckhoff(倍福)PLC读写巴鲁夫RFID
- STM32基于rt_thread操作系统的SDHC卡文件
- 编写简单的RMI程序 多线程web 服务器
- 51模拟SPI读写SD卡(包括Fat和Fat32文件
- ply格式文件的读写程序
- 德卡D8读写器关于读写感应卡的一些代
- 多线程生产者消费者模式
- 用PIC16F877实现EEPROM读写程序
- 上传大文件并显示进度条控件实例
- usb调试程序 对USB设备进行数据的读写
- 对大文件的读写的两个类C#
- TMS320F2812_FLASH读写实例
- stm32 用SPI 方式读写 SDHC
- 多线程实例:桌面智能弹球小游戏
- WPF多线程演示
- 易语言读写加密配置项源码
- 易语言:多线程传多变量的最稳定方
- 明泰urf r330读写软件 官方版
- Labwindows/CVI下Excel打开、读写操作
- delphi rfid 读写卡读卡器/写卡器源程序
- RFID读写demo
- 校园一卡通系统中RFID读写器的设计
- W25Q256四字节模式读写程序
- CH341编程器软件1.30支持32M
- 单片机实现通用存贮器IC卡读写
- OFC3发卡器IC卡读写器驱动程序 v1.4 官
- Nand Flash读写操作 收藏版
- STM32 自带内部FLASH 读写
- 完美解决苹果MacBook无法对NTFS格式的
评论
共有 条评论