|
  
- 帖子
- 1296
- 精华
- 0
- 青韶币
- 1957
- 魅力
- 0
- 威望
- 0
- 性别
- 男
- 注册时间
- 2003-7-16

|
我来做一下这个题
悬赏分:
能按要求输出的给出的得10分!实现算法大家公认最好的给20分!!
有一个大点的文本文件(大于等于10000000字节),请你将该文本文件回显到标准输出里。
使用时间最短的程序给20分。半天程序没反应的不给分。。。
我自己写了两种实现方法,并做了比较
编程步骤:
1:使用vs2003.net(vs6.0也可以)
2:新建立一个名叫WriteToConsole的win32控制台项目
3:项目属性->c++->代码生成->运行时库,把单线程改成多线程.
为了编程方便,省去输入步骤,一直从data.txt文件输入.
源代码:
stdafx.h////////////////////////////////////////////////////
// stdafx.h : 标准系统包含文件的包含文件,
// 或是常用但不常更改的项目特定的包含文件
//
#pragma once
#include <iostream>
#include <tchar.h>
// TODO: 在此处引用程序要求的附加头文件
#include<stdio.h>
#include<windows.h>
#include<process.h>
WriteToConsole.cpp////////////////////////////
// WriteToConsole.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
using namespace std;
UINT WINAPI AssistantThread(LPVOID pvParam)//用来计算时间
{
while(1)
{
(*((UINT*)pvParam))++;
Sleep(1000);
}
return 0;
}
void UseStdio()
{
FILE* f;char buf[1024],c=0;
f=fopen("data.txt","r");
setbuf(f,buf);;
while(c!=EOF)
{
c=getc(f);
cout<<c;
}
fclose(f);
}
void UseMapFile()
{
HANDLE hFile=CreateFile("data.txt",GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
HANDLE hFileMapping=CreateFileMapping(hFile,NULL,PAGE_READONLY,0,0,NULL);
char* p=(char*)MapViewOfFile(hFileMapping,FILE_MAP_READ,0,0,0);
cout<<p;
UnmapViewOfFile(p);
CloseHandle(hFileMapping);
CloseHandle(hFile);}
int _tmain(int argc, _TCHAR* argv[])
{
UINT nStd=0,nMapFile=0;
cout<<"使用标准C语言函数:"<<endl;
system("pause");
HANDLE hThread=(HANDLE)_beginthreadex(NULL,0,AssistantThread,&nStd,0,NULL);
UseStdio();
TerminateThread(hThread,0);
cout<<endl<<"使用内存映射文件:"<<endl;
system("pause");
hThread=(HANDLE)_beginthreadex(NULL,0,AssistantThread,&nMapFile,0,NULL);
UseMapFile();
TerminateThread(hThread,0);
cout<<endl<<"使用标准C语言函数耗时:"<<nStd<<" 使用内存映射文件耗时:"<<nMapFile<<endl;
system("pause");
return 0;
}
用一个1m多的文件做实验发现用内存映射文件会快个几秒
[ 本帖最后由 网络幽灵 于 2006-11-23 19:53 编辑 ] |
|