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

📄 clibench.cpp

📁 一个硬件测试工具的源代码
💻 CPP
📖 第 1 页 / 共 4 页
字号:
#include <afxwin.h>
#include <afxext.h>
#include "clibench.h"
#include "resource.h"
#include "bench.h"
#include "queen.h"
#include "whet.h"
#include <math.h>
#include "bench2.h"
#include "dhry2.h"
#include <direct.h>
#include "matrix.h"
#include "DescDlg.h"
#include "AppAboutDlg.h"
#include "sys/timeb.h"
//#include "CDescDlg.h"



CFrameWnd m_pMainWnd;

static CclibenchApp clibenchApp;
const int la=100;
char buffer[la][256];
char marks[2][la][2][12];
bool memTest=false;
bool queenTest=false;
bool whetTest=false;
bool floatTest=false;
bool diskTest[32];
bool dhryTest=false;
bool numTest=false;
bool matrTest=false;
bool showDesc=false;
int langeTests=1;
//char diskdrives[0][1024];
//DWORD driveBuff=1023;
bool disks[32];
int zaehler=0;
const int maxthreads=128;
int nOfThreads=4;
int noftPot=4;
unsigned long threadResult[maxthreads];
int threadRun[maxthreads];
HANDLE hBenchThread[maxthreads];
int sPos=0;



// CclibenchApp Member-Funktionen ///////////////////////////////////////////////////////////

BOOL CclibenchApp::InitInstance()
{
	m_pMainWnd=new CMainWindow();
	m_pMainWnd->ShowWindow(m_nCmdShow);
	return TRUE;
}

// CMainWindow Member-Funktionen //////////////////////////////////////////////////////////

CMainWindow::CMainWindow()
{	
	Create(NULL, "CliBench Mk III SMP 0.7.7 ",WS_OVERLAPPEDWINDOW|WS_VSCROLL,rectDefault,NULL,MAKEINTRESOURCE(IDR_MAINFRAME));
	CMenu *menu=(GetMenu()->GetSubMenu(1))->GetSubMenu(7);
	ShowScrollBar(SB_VERT,TRUE);
	int drive, curdrive;
	/*int i=0;
	while (i<la)
	{
		marks[0][i][0][0]=char(0);
		marks[0][i][1][0]=char(0);
		marks[1][i][0][0]=char(0);
		marks[1][i][1][0]=char(0);
	++i;
	}/*
   /* Save current drive. */
   curdrive = _getdrive();

   /* If we can switch to the drive, it exists. */
   drive=3;
   while(drive < 27)
   {
	   if (_chdrive( drive )) disks[drive-1]=false;
	   else disks[drive-1]=true;
	++drive;
   }
	_chdrive( curdrive );

	if (!disks[2]) menu->DeleteMenu(ID_DISKC,MF_BYCOMMAND);
	if (!disks[3]) menu->DeleteMenu(ID_DISKD,MF_BYCOMMAND);
	if (!disks[4]) menu->DeleteMenu(ID_DISKE,MF_BYCOMMAND);
	if (!disks[5]) menu->DeleteMenu(ID_DISKF,MF_BYCOMMAND);
	if (!disks[6]) menu->DeleteMenu(ID_DISKG,MF_BYCOMMAND);
	if (!disks[7]) menu->DeleteMenu(ID_DISKH,MF_BYCOMMAND);
	if (!disks[8]) menu->DeleteMenu(ID_DISKI,MF_BYCOMMAND);
	if (!disks[9]) menu->DeleteMenu(ID_DISKJ,MF_BYCOMMAND);
	if (!disks[10]) menu->DeleteMenu(ID_DISKK,MF_BYCOMMAND);
	if (!disks[11]) menu->DeleteMenu(ID_DISKL,MF_BYCOMMAND);
	if (!disks[12]) menu->DeleteMenu(ID_DISKM,MF_BYCOMMAND);
	if (!disks[13]) menu->DeleteMenu(ID_DISKN,MF_BYCOMMAND);
	if (!disks[14]) menu->DeleteMenu(ID_DISKO,MF_BYCOMMAND);
	if (!disks[15]) menu->DeleteMenu(ID_DISKP,MF_BYCOMMAND);
	if (!disks[16]) menu->DeleteMenu(ID_DISKQ,MF_BYCOMMAND);
	if (!disks[17]) menu->DeleteMenu(ID_DISKR,MF_BYCOMMAND);
	if (!disks[18]) menu->DeleteMenu(ID_DISKS,MF_BYCOMMAND);
	if (!disks[19]) menu->DeleteMenu(ID_DISKT,MF_BYCOMMAND);
	if (!disks[20]) menu->DeleteMenu(ID_DISKU,MF_BYCOMMAND);
	if (!disks[21]) menu->DeleteMenu(ID_DISKV,MF_BYCOMMAND);
	if (!disks[22]) menu->DeleteMenu(ID_DISKW,MF_BYCOMMAND);
	if (!disks[23]) menu->DeleteMenu(ID_DISKX,MF_BYCOMMAND);
	if (!disks[24]) menu->DeleteMenu(ID_DISKY,MF_BYCOMMAND);
	if (!disks[25]) menu->DeleteMenu(ID_DISKZ,MF_BYCOMMAND);
}

// darstellung und refresh ///////////////////////////////////////////////////////////////////


void CMainWindow::OnPaint()
{	
	int i=0;int j;
	CPaintDC dc(this);
	CRect rect;
	CFont *font;
	//font=(CFont*) dc.SelectStockObject(ANSI_FIXED_FONT);
	font=(CFont*) dc.SelectStockObject(ANSI_FIXED_FONT);
	GetClientRect(rect);
	SetScrollRange(SB_VERT,0,la-1,TRUE);
	SetScrollPos(SB_VERT,sPos,TRUE);
	dc.SetTextAlign(TA_TOP|TA_LEFT);
	i=sPos;
	while (i<la)  // schreibe text auf bildschirm
	{	j=0;
		while ((buffer[i][j]!=char(0))&&(j<256)) {++j;}
		dc.TextOut(rect.left+10,rect.top+(i-sPos)*14,buffer[i],j);
		++i;
	}
}



//bufferUpdaten //////////////

void updateBuffer()
{
	showDesc=false;
	int i=0;
	while (i<la)
	{	
		buffer[i][0]=char(0);
	++i;
	}
	int j=0;
	int z=0;
	sprintf(buffer[z],"                                this      other              relative");++z;
	sprintf(buffer[z],"                            computer   computer           performance");++z;
	sprintf(buffer[z]," ");++z;
	int total[4];
	total[0]=0; total[1]=0; total[2]=0; total[3]=0;
	int k=0;
	char c1[12];
	int prozent=0;
	if (marks[0][j][0][0]=='d')
	{	
		i=0;
		while(i<la)
		{
			if (marks[1][i][0][0]=='d') 
			{
				sprintf(c1,"%s",marks[1][i][1]);
				prozent=100*atol(marks[0][j][1])/(atol(c1));
				total[0]=total[0]+prozent;++total[1];
				k=i;i=la;
			}
			else
			{
				sprintf(c1,"n/a");prozent=0;
			}
		++i;
		}
		sprintf(buffer[z],"Dhrystone 2.1             %10s %10s  MIPS     %3u percent",marks[0][j][1],c1,prozent);
		++j;
		++z;
	}
	if (marks[0][j][0][0]=='w')
	{	
		i=0;
		while(i<la)
		{
			if (marks[1][i][0][0]=='w') 
			{
				sprintf(c1,"%s",marks[1][i][1]);
				prozent=100*atol(marks[0][j][1])/atol(c1);
				//total[0]=total[0]+prozent;++total[1];
				total[2]=total[2]+prozent;++total[3];
				k=i;i=la;
			}
			else
			{
				sprintf(c1,"n/a");prozent=0;
			}
		++i;
		}
		sprintf(buffer[z],"Whetstone                 %10s %10s  MFLOPS   %3u percent",marks[0][j][1],c1,prozent);
		++z;
		++j;
	}
	
	if (marks[0][j][0][0]=='q')
	{	
		i=0;
		while(i<la)
		{
			if (marks[1][i][0][0]=='q') 
			{
				sprintf(c1,"%s",marks[1][i][1]);
				prozent=100*atol(marks[0][j][1])/atol(c1);
				total[0]=total[0]+prozent;++total[1];
				k=i;i=la;
			}
			else
			{
				sprintf(c1,"n/a");prozent=0;
			}
		++i;
		}
		sprintf(buffer[z],"Eight queens problem      %10s %10s  pps      %3u percent",marks[0][j][1],c1,prozent);
		++z;
		++j;
	}
	

	if (marks[0][j][0][0]=='c')
	{	
		i=0;
		while(i<la)
		{
			if (marks[1][i][0][0]=='c') 
			{
				sprintf(c1,"%s",marks[1][i][1]);
				prozent=100*atol(marks[0][j][1])/atol(c1);
				total[0]=total[0]+prozent;++total[1];
				k=i;i=la;
			}
			else
			{
				sprintf(c1,"n/a");prozent=0;
			}
		++i;
		}
		sprintf(buffer[z],"Matrix operations         %10s %10s  k ops    %3u percent",marks[0][j][1],c1,prozent);
		++z;
		++j;
	}

	if (marks[0][j][0][0]=='n')
	{	
		i=0;
		while(i<la)
		{
			if (marks[1][i][0][0]=='n') 
			{
				sprintf(c1,"%s",marks[1][i][1]);
				prozent=100*atol(marks[0][j][1])/atol(c1);
				total[0]=total[0]+prozent;++total[1];
				k=i;i=la;
			}
			else
			{
				sprintf(c1,"n/a");prozent=0;
			}
		++i;
		}
		sprintf(buffer[z],"Number crunch             %10s %10s  k ops    %3u percent",marks[0][j][1],c1,prozent);
		++z;
		++j;
	}

	if (marks[0][j][0][0]=='f')
	{	
		i=0;
		while(i<la)
		{
			if (marks[1][i][0][0]=='f') 
			{
			sprintf(c1,"%s",marks[1][i][1]);
				prozent=100*atol(marks[0][j][1])/atol(c1);
				//total[0]=total[0]+prozent;++total[1];
				total[2]=total[2]+prozent;++total[3];
				k=i;i=la;
			}
			else
			{
				sprintf(c1,"n/a");prozent=0;
			}
		++i;
		}
		sprintf(buffer[z],"Floating point            %10s %10s  k ops    %3u percent",marks[0][j][1],c1,prozent);
		++z;
		++j;
	}


	if (marks[0][j][0][0]=='m')
	{	
		i=0;
		while(i<la)
		{
			if (marks[1][i][0][0]=='m') 
			{
				sprintf(c1,"%s",marks[1][i][1]);
				prozent=100*atol(marks[0][j][1])/atol(c1);
				total[0]=total[0]+prozent;++total[1];
				k=i;i=la;
			}
			else
			{
				sprintf(c1,"n/a");prozent=0;
			}
		++i;
		}
		sprintf(buffer[z],"Memory throughput         %10s %10s  kB/sec   %3u percent",marks[0][j][1],c1,prozent);++z;	
		++j;
	}
sprintf(buffer[z],"                                                                                                          ");
++z;
if (total[1]!=0) 
		{
		sprintf(buffer[z],"                                           Total CPU      %3u percent",((total[0])/(total[1])));
		++z;
		}
if (total[3]!=0)
		{
		sprintf(buffer[z],"                                           Total FPU      %3u percent",((total[2])/(total[3])));
		++z;
		}
if (total[1]!=0)
	{	
		sprintf(buffer[z],"                                             Average      %3u percent",((total[0]+total[2])/(total[1]+total[3])));
		++z;
}
if (total[1]!=0 && total[3]!=0)
	{
		sprintf(buffer[z],"                                                                     ");
		++z;
		sprintf(buffer[z],"                             Application Performance      %3u percent",(((1+total[0]/total[1])*92)+((total[2])/(total[3]))*8)/100);
		++z;
	}
	
	char drive0='?',drive1='?';
	int i0=0,i1=0;
	int ialt0=0,ialt1=0;
	while ((z<(la-9))&&!(i0>=(la-6))&&!(i1>=(la-6)))
	{
		int l=0;
		while ((l<26)&&(i0<la))
		{
			if (marks[0][i0][0][0]==char(65+l)) {drive0=char(65+l);ialt0=i0;break;}
			++l;
		}
		if (i0<la) ++i0;
		l=0;
		while ((l<26)&&(i1<la))
		{
			if (marks[1][i1][0][0]==char(65+l)) {drive1=char(65+l);ialt1=i1;break;}
			++l;
		}
		if (i1<la) ++i1;
		if ((drive0!='?')&&(drive1!='?'))
		{	sprintf(buffer[z]," ");++z;
			sprintf(buffer[z],"                             Drive %c    Drive %c",drive0,drive1);++z;
			sprintf(buffer[z],"Read max                  %10s %10s  kB/sec ",marks[0][ialt0][1],marks[1][ialt1][1]);++z;
			sprintf(buffer[z],"Read average              %10s %10s  kB/sec ",marks[0][ialt0+1][1],marks[1][ialt1+1][1]);++z;
			sprintf(buffer[z],"Read min                  %10s %10s  kB/sec ",marks[0][ialt0+2][1],marks[1][ialt1+2][1]);++z;
			sprintf(buffer[z],"Write max                 %10s %10s  kB/sec ",marks[0][ialt0+3][1],marks[1][ialt1+3][1]);++z;
			sprintf(buffer[z],"Write average             %10s %10s  kB/sec ",marks[0][ialt0+4][1],marks[1][ialt1+4][1]);++z;
			sprintf(buffer[z],"Write min                 %10s %10s  kB/sec ",marks[0][ialt0+5][1],marks[1][ialt1+5][1]);++z;
			sprintf(buffer[z],"CPU usage                 %10s %10s  percent ",marks[0][ialt0+6][1],marks[1][ialt1+6][1]);++z;
			drive0='?';
			drive1='?';
		}	
		if ((drive0!='?')&&(drive1=='?'))
		{	sprintf(buffer[z]," ");++z;
			sprintf(buffer[z],"                             Drive %c        ",drive0);++z;
			sprintf(buffer[z],"Read max                  %10s  kB/sec ",marks[0][ialt0][1]);++z;
			sprintf(buffer[z],"Read average              %10s  kB/sec ",marks[0][ialt0+1][1]);++z;
			sprintf(buffer[z],"Read min                  %10s  kB/sec ",marks[0][ialt0+2][1]);++z;
			sprintf(buffer[z],"Write max                 %10s  kB/sec ",marks[0][ialt0+3][1]);++z;
			sprintf(buffer[z],"Write average             %10s  kB/sec ",marks[0][ialt0+4][1]);++z;
			sprintf(buffer[z],"Write min                 %10s  kB/sec ",marks[0][ialt0+5][1]);++z;
			sprintf(buffer[z],"CPU usage                 %10s  percent ",marks[0][ialt0+6][1]);++z;
			drive0='?';
			drive1='?';
		}	
		if ((drive0=='?')&&(drive1!='?'))
		{	sprintf(buffer[z]," ");++z;
			sprintf(buffer[z],"                                        Drive %c",drive1);++z;
			sprintf(buffer[z],"Read max                  %10s %10s  kB/sec "," ",marks[1][ialt1][1]);++z;
			sprintf(buffer[z],"Read average              %10s %10s  kB/sec "," ",marks[1][ialt1+1][1]);++z;
			sprintf(buffer[z],"Read min                  %10s %10s  kB/sec "," ",marks[1][ialt1+2][1]);++z;
			sprintf(buffer[z],"Write max                 %10s %10s  kB/sec "," ",marks[1][ialt1+3][1]);++z;
			sprintf(buffer[z],"Write average             %10s %10s  kB/sec "," ",marks[1][ialt1+4][1]);++z;
			sprintf(buffer[z],"Write min                 %10s %10s  kB/sec "," ",marks[1][ialt1+5][1]);++z;
			sprintf(buffer[z],"CPU usage                 %10s %10s  percent "," ",marks[1][ialt1+6][1]);++z;
			drive0='?';
			drive1='?';
		}	
	}
}

void CMainWindow::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
	switch (nSBCode)
	{
	case SB_LINEUP:sPos=sPos-1;break;
	case SB_LINEDOWN:sPos=sPos+1;break;
	case SB_THUMBTRACK:sPos=nPos;break;
	case SB_PAGEUP:sPos=sPos-3;break;
	case SB_PAGEDOWN:sPos=sPos+3;break;
	}
	if (sPos<0) 
	{
		sPos=0;
	}
	if (sPos>la) 
	{
		sPos=la;
	}
	//updateBuffer();
	RedrawWindow();
	InvalidateRect(NULL, FALSE);
	UpdateWindow();
}

// Menus checken /////////////////////////////////////////////////////////////////////////////

void CMainWindow::OnFileOpen()
{
	sPos=0;
	CString szFilter="CliBench Files Mk III Files (*.cb3) |*.cb3| CliBench Mk II Files (*.cbf) |*.cbf| All files (*.*)|*.*||";
	CString defName="*.cb3";
	CString descBuf;
	int driveno;
	CStdioFile fi;
	CString sFileName;
	char buf[13];
	CFileDialog *mDateiWahl;
	int i=0;
	while (i<la)
	{
		marks[0][i][0][0]=char(0);
		marks[0][i][1][0]=char(0);
		++i;
	}
	mDateiWahl=new CFileDialog(TRUE,NULL,defName,OFN_HIDEREADONLY,szFilter);
	mDateiWahl->m_ofn.lpstrTitle="CliBench open file...";
	if (mDateiWahl->DoModal()==IDOK)
	{
		sFileName=mDateiWahl->GetPathName();
		if(!fi.Open(sFileName,CFile::modeRead))
		{
			AfxMessageBox("Can't open file!",MB_OK|MB_ICONSTOP);
		}
		else
		{
		//Datei einlesen

⌨️ 快捷键说明

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