⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 massperf.cpp

📁 EP9315开发板的Wince6.0的BSP包文件
💻 CPP
字号:
#include "windows.h"
#include "stdio.h"

static void MakeMassStoragePerformace( TCHAR * csSrc, TCHAR* csDst, DWORD dwBufSize );

int _tmain(int argc, TCHAR *argv[], TCHAR *envp[])
{
	DWORD dwPort=-1;
	BOOL  bReboot=FALSE;
	TCHAR csSrc[MAX_PATH]=L"";
	TCHAR csDst[MAX_PATH]=L"";

#define FLAG_SOURCE 10
#define FLAG_DEST   11
#define FLAG_NULL   0

	DWORD dwFlag=FLAG_NULL;
	DWORD dwBufSize=128;

	argv++; // the first parameter is the name of the program.
	argc--;
    while(1)
    {
        if(argc == 0)
        {
            break;
        }
		if( (argv[0][0] == '-') ){

			if(argv[0][1] =='s')
			{
				dwFlag=FLAG_SOURCE;
			}
			else if(argv[0][1] =='d')
			{
				dwFlag=FLAG_DEST;
			}
			else if(argv[0][1] =='b')
			{
				dwBufSize=_wtol(argv[0] + 2);
			}
			else if(argv[0][1] == 'h')
			{
				//Usage();
				wprintf(L"Usage:\r\n");
				wprintf(L"\t-s source file name\r\n");
				wprintf(L"\t-d destination file name\r\n");
				wprintf(L"\t-b Buffer size in KB\r\n");
				return(1);
			}

		}else{
			if( dwFlag==FLAG_SOURCE ){
				wcscat(csSrc, argv[0]);
				wcscat(csSrc, L" ");
			}else if(dwFlag==FLAG_DEST){
				wcscat(csDst, argv[0]);
				wcscat(csDst, L" ");
			}
		}
        //
        // Skip to the next argument on the command line.
        //
        argv++;
        argc--;
    }

	if( wcslen(csSrc) && wcslen(csDst ) ){

		csSrc[wcslen(csSrc)-1]=0;
		csDst[wcslen(csDst)-1]=0;

		MakeMassStoragePerformace( csSrc, csDst , dwBufSize );

	}else{

		wprintf(L"Please give the source& destination file name\r\n");
	}
    return 0;
}


void  MakeMassStoragePerformace( TCHAR * csSrc, TCHAR* csDst, DWORD dwBufSize )
{
	HANDLE hSrc, hDst;
	DWORD dwRead;
	PCHAR pBuffer=NULL;
	DWORD dwStart, dwIdleStart;
	DWORD dwEnd, dwIdleEnd;
	DWORD dwWrite;
	DWORD dwAvCount=0, dwAvIdle=0;

	if( dwBufSize >4096 )
		dwBufSize=4096;
	if( dwBufSize <16 )
		dwBufSize=16;

	dwBufSize*=1024;

	RETAILMSG(1,(L"Source %s, Dest %s\r\n", csSrc, csDst));

	pBuffer=(PCHAR)LocalAlloc(LPTR,dwBufSize);
	if(!pBuffer){
		printf("Can't get memory, stop\r\n");
		return;
	}

	hSrc=CreateFile(csSrc, GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,0,NULL);
	hDst=CreateFile(csDst, GENERIC_WRITE,0,NULL,CREATE_ALWAYS,0,NULL);

	if( hSrc ==INVALID_HANDLE_VALUE || 
		hDst ==INVALID_HANDLE_VALUE ){

			goto Failed_Stop;
	}

	while( 1 ){
		
		dwStart=GetTickCount();
		dwIdleStart=GetIdleTime( );
		if(ReadFile(hSrc,pBuffer,dwBufSize,&dwRead,NULL) ){

			if(!WriteFile(hDst,pBuffer,dwRead,&dwWrite,NULL) ){
				printf("Write failed,stop\r\n"); //maybe the disk is full.
				break;
			}
		}else{
			break;
		}
		if(!dwRead)
			break;

		dwEnd=GetTickCount( )-dwStart;
		dwIdleEnd=GetIdleTime( )-dwIdleStart;
		
		dwAvCount+=dwEnd;
		dwAvIdle+=dwIdleEnd;

		printf("%dK/s,CPU usage %d%%\r",dwRead/dwEnd, (dwEnd-dwIdleEnd)*100/dwEnd);
	}

	printf("\r\naverage: %dK/s,CPU usage %d%%\r\n",
		GetFileSize(hSrc,NULL)/dwAvCount,
		(dwAvCount-dwAvIdle)*100/dwAvCount);

Failed_Stop:

	if(pBuffer)
		LocalFree( pBuffer );
	if( hSrc)
		CloseHandle(hSrc);
	if( hDst)
		CloseHandle(hDst);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -