java 线程一起画图_多线程同时从多个txt文件中读取数据,画图,保存处理多个EXCEL中的代码,并将结果写到文件中保存...

// ZTEAnalysisDataDlg.cpp : 实现文件

//

#include "stdafx.h"

#include "ZTEAnalysisData.h"

#include "ZTEAnalysisDataDlg.h"

#include "CApplication.h"

#include "CWorkbook.h"

#include "CWorkbooks.h"

#include "CWorksheet.h"

#include "CWorksheets.h"

#include "CRange.h"

#include "CChart.h"

#include "CCharts.h"

#include "CChartObject.h"

#include "CChartObjects.h"

#include "CSeries.h"

#include "CSeriesCollection.h"

#include "CAxis.h"

#include "CChartTitle.h"

#include "COMUTIL.H"

#ifdef _DEBUG

#define new DEBUG_NEW

#endif

struct LINE

{

CString  Data_YMD;

CString  Date_HMS;

CString  Board;

CString  CardType;

CString  CPU_1;

CString  CPU_2;

CString  CPU_3;

CString  CPU_4;

CString  MEM_Total;

CString  MEM_Free;

CString  MEM_Userate;

};

typedef struct

{

CString  szFileName2;

CString  strPath;

CString  LineBoard;

unsigned int CurFileIndex;

HWND hWnd;

BOOL bBusy;//线程是否在处理中

long FirstData;

long LastData;

}THREAD_INFO;

COleVariant covOptional((long)

DISP_E_PARAMNOTFOUND,VT_ERROR);

THREAD_INFO

ThreadInfo[200];//最多同时处理200个

CWinThread *

pThreadArray[200];//最多同时处理200个

//

CString szPathName = _T(""); // Full pathname of input raw

data file

CString szFileName = _T(""); // File name of input raw data

file

CString szFileTitle = _T(""); // File title

CString szDirPath = _T(""); // DIR PATH title

CString szFind = _T("");

unsigned int FileCont = 0;

// 用于应用程序“关于”菜单项的 CAboutDlg 对话框

CProgressCtrl *g_pProgress = NULL;

CProgressCtrl *g_pProgress2 = NULL;

//指向线程的指针

CWinThread * ptThread;

int  TotalProg = 0;

int  nCurThreadNum = 0;

CString ConfigThreadNum = _T("");

CString DispCtrl = _T("");

int nConfigThreadNum = 5;

int nDisplayControl = 1;

int nExceptionFileIndex = 0;

CStdioFile Recordfile;

CStdioFile RecordExceptfile;

class CAboutDlg : public CDialog

{

public:

CAboutDlg();

// 对话框数据

enum { IDD = IDD_ABOUTBOX };

protected:

virtual void DoDataExchange(CDataExchange* pDX);

// DDX/DDV 支持

// 实现

protected:

DECLARE_MESSAGE_MAP()

};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)

{

}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)

{

CDialog::DoDataExchange(pDX);

}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)

END_MESSAGE_MAP()

// CZTEAnalysisDataDlg 对话框

CZTEAnalysisDataDlg::CZTEAnalysisDataDlg(CWnd* pParent )

: CDialog(CZTEAnalysisDataDlg::IDD, pParent)

, ThreadNumber(_T(""))

, DisolayControl(_T(""))

{

m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

}

void CZTEAnalysisDataDlg::DoDataExchange(CDataExchange*

pDX)

{

CDialog::DoDataExchange(pDX);

DDX_Control(pDX, IDC_PROGRESS2, ProcProgress);

DDX_Control(pDX, IDC_PROGRESS3, ProcProgress2);

DDX_Text(pDX, IDC_EDIT1, ThreadNumber);

DDX_Text(pDX, IDC_EDIT2, DisolayControl);

}

BEGIN_MESSAGE_MAP(CZTEAnalysisDataDlg, CDialog)

ON_WM_SYSCOMMAND()

ON_WM_PAINT()

ON_WM_QUERYDRAGICON()

//}}AFX_MSG_MAP

ON_BN_CLICKED(IDC_BUTTON1,

&CZTEAnalysisDataDlg::OnBnClickedButton1)

ON_BN_CLICKED(IDC_BUTTON2,

&CZTEAnalysisDataDlg::OnBnClickedButton2)

ON_NOTIFY(NM_CUSTOMDRAW, IDC_PROGRESS2,

&CZTEAnalysisDataDlg::OnNMCustomdrawProgress2)

ON_NOTIFY(NM_CUSTOMDRAW, IDC_PROGRESS3,

&CZTEAnalysisDataDlg::OnNMCustomdrawProgress3)

ON_STN_CLICKED(IDC_TT_PRG,

&CZTEAnalysisDataDlg::OnStnClickedTtPrg)

ON_MESSAGE(UM_MSG,

&CZTEAnalysisDataDlg::OnHandleMsg)

ON_MESSAGE(WM_DESTROY,

&CZTEAnalysisDataDlg::OnDestroy)

ON_EN_CHANGE(IDC_EDIT1,

&CZTEAnalysisDataDlg::OnEnChangeEdit1)

ON_EN_CHANGE(IDC_EDIT2,

&CZTEAnalysisDataDlg::OnEnChangeEdit2)

END_MESSAGE_MAP()

BOOL CheckProcIsRunning(void)

{

int i = 0;

for (i=0; i<200; i++)

{

if ((pThreadArray[i] != NULL ) &&

ThreadInfo[i].bBusy)

{

return TRUE;

}

}

return FALSE;

}

// CZTEAnalysisDataDlg 消息处理程序

BOOL CZTEAnalysisDataDlg::OnInitDialog()

{

CDialog::OnInitDialog();

FileCont = 0;

TotalProg = 0;

nCurThreadNum = 0;

nDisplayControl = 1;

nConfigThreadNum = 5;

nExceptionFileIndex = 0;

// 将“关于...”菜单项添加到系统菜单中。

// IDM_ABOUTBOX 必须在系统命令范围内。

ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);

ASSERT(IDM_ABOUTBOX < 0xF000);

memset(pThreadArray,0,sizeof(pThreadArray));

#if 0

//初始化一定要加上,否则在有些电脑上,没法启动OLE服务(EXCEL等)

if (!AfxOleInit())

{

AfxMessageBox(_T("Init OLe failed"));

return FALSE;

}

AfxEnableControlContainer();

Sleep(10);

if (!app.CreateDispatch(_T("Excel.Application")))

{

AfxMessageBox(_T("无法创建Excel应用!"));

return FALSE;

}

#endif

g_pProgress = NULL;

CMenu* pSysMenu = GetSystemMenu(FALSE);

if (pSysMenu != NULL)

{

CString strAboutMenu;

strAboutMenu.LoadString(IDS_ABOUTBOX);

if (!strAboutMenu.IsEmpty())

{

pSysMenu->AppendMenu(MF_SEPARATOR);

pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX,

strAboutMenu);

}

}

g_pProgress = &ProcProgress;

g_pProgress2 = &ProcProgress2;

// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动

//  执行此操作

SetIcon(m_hIcon, TRUE); // 设置大图标

SetIcon(m_hIcon, FALSE); // 设置小图标

ProcProgress.SetRange(0,100);

ProcProgress.SetPos(0);

ProcProgress2.SetRange(0,100);

ProcProgress2.SetPos(0);

// TODO: 在此添加额外的初始化代码

GetDlgItem(IDC_TOTALFILE)->SetWindowText(_T("0"));

GetDlgItem(IDC_CURFILE)->SetWindowText(_T("0"));

GetDlgItem(IDC_TT_PRG)->SetWindowText(_T("0%"));

GetDlgItem(IDC_SUBPROG)->SetWindowText(_T("0%"));

GetDlgItem(IDC_INFO)->SetWindowText(_T(" "));

ThreadNumber.Format(_T("%d"),nConfigThreadNum);

DisolayControl.Format(_T("%d"),nDisplayControl);

UpdateData(FALSE);

return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE

}

void CZTEAnalysisDataDlg::OnSysCommand(UINT nID, LPARAM

lParam)

{

if ((nID & 0xFFF0) == IDM_ABOUTBOX)

{

CAboutDlg dlgAbout;

dlgAbout.DoModal();

}

else

{

CDialog::OnSysCommand(nID, lParam);

}

}

// 如果向对话框添加最小化按钮,则需要下面的代码

//  来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,

//  这将由框架自动完成。

void CZTEAnalysisDataDlg::OnPaint()

{

if (IsIconic())

{

CPaintDC dc(this); // 用于绘制的设备上下文

SendMessage(WM_ICONERASEBKGND,

reinterpret_cast(dc.GetSafeHdc()), 0);

// 使图标在工作区矩形中居中

int cxIcon = GetSystemMetrics(SM_CXICON);

int cyIcon = GetSystemMetrics(SM_CYICON);

CRect rect;

GetClientRect(&rect);

int x = (rect.Width() - cxIcon + 1) / 2;

int y = (rect.Height() - cyIcon + 1) / 2;

// 绘制图标

dc.DrawIcon(x, y, m_hIcon);

}

else

{

CDialog::OnPaint();

}

}

//当用户拖动最小化窗口时系统调用此函数取得光标

//显示。

HCURSOR CZTEAnalysisDataDlg::OnQueryDragIcon()

{

return static_cast(m_hIcon);

}

void CZTEAnalysisDataDlg::OnBnClickedButton1()

{

// TODO: 在此添加控件通知处理程序代码

int i = 0, j =0;

CStdioFile file;//当前打开的文件

if (CheckProcIsRunning())

{

AfxMessageBox(_T("Processing,Please wait~~~"));

return;

}

FileCont = 0;

CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY |

OFN_OVERWRITEPROMPT, NULL);

if(dlg.DoModal() ==

IDOK)

{

szPathName = dlg.GetPathName();

szFileName = dlg.GetFileName();

szFileTitle = dlg.GetFileTitle();

//AfxMessageBox(szPathName);

}

if (!file.Open(szPathName,CFile::modeRead))

{

AfxMessageBox(_T("Open file failed"));

return;

}

file.Close();

szDirPath = szPathName;

//szDirPath = szPathName.Trim(szFileName);

szDirPath.Replace(szFileName,_T(""));

//szDirPath.Replace(_T("\"),_T("//"));

szFind.Format(_T("%s\*.txt"),szDirPath);

#if 1

CFileFind finder;

CString strPath;

BOOL

bWorking = finder.FindFile(szFind,0);

while

(bWorking)

{

bWorking =

finder.FindNextFile();

//strPath=finder.GetFilePath();

//strPath就是所要获取Test目录下的文件夹和文件(包括路径)

//AfxMessageBox(strPath);

FileCont ++;

}

finder.Close();

#endif

CString Disp;

Disp.Format(_T("%d"),FileCont);

//AfxMessageBox(Disp);

GetDlgItem(IDC_TOTALFILE)->SetWindowText(Disp);

if (FileCont)

{

if

(!Recordfile.Open(szDirPath+_T("RecordInfo.Log"),CFile::modeReadWrite

| CFile::modeCreate))

{

AfxMessageBox(_T("Open file failed"));

}

if(!CreateDirectory(szDirPath+_T("\\ExceptionFile"),NULL))

{

AfxMessageBox(_T("Create dir failed"));

}

if

(!RecordExceptfile.Open(szDirPath+_T("\\ExceptionFile\\RecordExceptionInfo.Log"),CFile::modeReadWrite

| CFile::modeCreate))

{

AfxMessageBox(_T("Open file failed"));

}

}

#if 0

//这个是导入已经存在的EXCEL文档

lpDisp = books.Open(strCreateFile,

covOptional, covOptional, covOptional, covOptional,

covOptional, covOptional, covOptional, covOptional,

covOptional, covOptional, covOptional, covOptional,

covOptional, covOptional

);

//与的不同,是个参数的,直接在后面加了两个covOptional成功了

book.AttachDispatch(lpDisp);

#endif

#if 0

strCreateFile = szDirPath +_T("Data.xlsx");

CString strCreateFile;

LPDISPATCH lpDisp;  //接口指针

//创建一个新的EXCEL文档

books = app.get_Workbooks();

book = books.Add(covOptional);

sheets = book.get_Worksheets();

sheets.Add(covOptional,covOptional,covOptional,covOptional);

book.SaveAs(COleVariant(strCreateFile),covOptional,covOptional,covOptional,covOptional,covOptional,(long)0,covOptional,covOptional,covOptional,covOptional,covOptional);

#endif

}

#if 1

void DisplaySubThreadInfo(HWND hmyWnd,long ThreadID,int

Per)

{

long Data = ThreadID * 1000 + Per;

g_pProgress2->SetPos(Per);

SendMessage(hmyWnd,UM_MSG,IDC_SUBPROG,Data);

}

UINT DataProc(LPVOID lpParam)

{

// TODO: 在此添加控件通知处理程序代码

int j = 0,i = 0, Length = 0, pos = 0, cnt = 0, Index =

0;

unsigned int SheetIndex = 1;

char *pcTmp = NULL;

unsigned int DataLineCnt = 0;

long FirtData = 0;

long LastData = 0;

VARIANT ret;

CApplication app;

CWorkbook book;

CWorkbooks books;

CWorksheets sheets;

CWorksheet sheet;

CRange range;

CRange cols;

int nTT = 0;

LINE Line;

CString StrLine = _T("");

CString Temp = _T("");;

HWND hmyWnd = NULL;

CString  strName = _T("");;

CString  strPath = _T("");;

CString szFileName2 = _T("");;

CString szCreateFileName = _T("");;

THREAD_INFO * pThreadInfo = NULL;

CStdioFile file;//当前打开的文件

pThreadInfo = (THREAD_INFO *)lpParam;

pThreadInfo->bBusy =  TRUE;

strPath = pThreadInfo->strPath;

szFileName2 = pThreadInfo->szFileName2;

hmyWnd = pThreadInfo->hWnd;

SheetIndex = pThreadInfo->CurFileIndex;

//初始化一定要加上,否则在有些电脑上,没法启动OLE服务(EXCEL等)

if (!AfxOleInit())

{

AfxMessageBox(_T("Init OLe failed"));

return FALSE;

}

AfxEnableControlContainer();

Sleep(10);

if (!app.CreateDispatch(_T("Excel.Application")))

{

AfxMessageBox(_T("无法创建Excel应用!"));

return FALSE;

}

//szCreateFileName = szFileName2.Trim(_T(".txt"));

szCreateFileName = szFileName2;

szCreateFileName.Replace(_T(".txt"),_T(""));

books = app.get_Workbooks();

book = books.Add(covOptional);

sheets = book.get_Worksheets();

book.SaveAs(COleVariant(szDirPath+szCreateFileName+_T(".xlsx")),covOptional,covOptional,covOptional,covOptional,covOptional,(long)0,covOptional,covOptional,covOptional,covOptional,covOptional);

//strPath就是所要获取Test目录下的文件夹和文件(包括路径)

//AfxMessageBox(strPath);

if (!file.Open(strPath,CFile::modeRead))

{

AfxMessageBox(_T("Open file failed"));

pThreadArray[SheetIndex] = NULL;

pThreadInfo->bBusy = FALSE;

return 0;

}

sheet =

sheets.Add(covOptional,covOptional,covOptional,covOptional);

//sheet =

sheets.get_Item(COleVariant((short)SheetIndex));

//要加判断,如果该行没有 满足多少个字符以上,就表示这行不是要统计的数据行,而是其他的打印信息

//获取 用 findoneof 找特征字串来过滤

i = 1;

j = 0;

Index = 0;

DisplaySubThreadInfo(hmyWnd,SheetIndex,10);

while(file.ReadString(StrLine))

{

while(Index<11)

{

AfxExtractSubString(Temp, StrLine, j++, ' ');

if(Temp.GetLength())

{

switch(Index)

{

case 0: Line.Data_YMD = Temp;break;

case 1: Line.Date_HMS = Temp;break;

case 2: Line.Board = Temp;break;

case 3: Line.CardType = Temp;break;

case 4: Line.CPU_1 = Temp;break;

case 5: Line.CPU_2 = Temp;break;

case 6: Line.CPU_3 = Temp;break;

case 7: Line.CPU_4 = Temp;break;

case 8: Line.MEM_Total = Temp;break;

case 9: Line.MEM_Free = Temp;break;

case 10: Line.MEM_Userate = Temp;break;

default: break;

}

Index++;

}

}

j = 0;

Index = 0;

Line.CPU_1 = Line.CPU_1.Left(2);

Line.CPU_2 = Line.CPU_2.Left(2);

Line.CPU_3 = Line.CPU_3.Left(2);

Line.CPU_4 = Line.CPU_4.Left(2);

Line.MEM_Userate = Line.MEM_Userate.Left(6);

//sscanf(StrLine,"%[^ ] %[^ ] %[^ ] %[^ ] %[^ ] %[^ ] %[^ ]

%[^ ] %[^ ] %[^ ] %[^ ]

",Line.Data_YMD,Line.Date_HMS,Line.Board,Line.CardType,Line.CPU_1,

//

Line.CPU_2,Line.CPU_3,Line.CPU_4,Line.MEM_Total,Line.MEM_Free,Line.MEM_Userate);

Temp.Format(_T("A%d"),i);

range =

sheet.get_Range(COleVariant(Temp),COleVariant(Temp));

range.put_Value2(COleVariant(Line.Data_YMD));

//cols = range.get_EntireColumn();

//cols.AutoFit();

Temp.Format(_T("B%d"),i);

range =

sheet.get_Range(COleVariant(Temp),COleVariant(Temp));

range.put_Value2(COleVariant(Line.Date_HMS));

//cols = range.get_EntireColumn();

//cols.AutoFit();

Temp.Format(_T("C%d"),i);

range =

sheet.get_Range(COleVariant(Temp),COleVariant(Temp));

range.put_Value2(COleVariant(Line.Board));

//cols = range.get_EntireColumn();

//cols.AutoFit();

Temp.Format(_T("D%d"),i);

range =

sheet.get_Range(COleVariant(Temp),COleVariant(Temp));

range.put_Value2(COleVariant(Line.CardType));

//cols = range.get_EntireColumn();

//cols.AutoFit();

Temp.Format(_T("E%d"),i);

range =

sheet.get_Range(COleVariant(Temp),COleVariant(Temp));

range.put_Value2(COleVariant(Line.CPU_1));

//cols = range.get_EntireColumn();

//cols.AutoFit();

Temp.Format(_T("F%d"),i);

range =

sheet.get_Range(COleVariant(Temp),COleVariant(Temp));

range.put_Value2(COleVariant(Line.CPU_2));

//cols = range.get_EntireColumn();

//cols.AutoFit();

Temp.Format(_T("G%d"),i);

range =

sheet.get_Range(COleVariant(Temp),COleVariant(Temp));

range.put_Value2(COleVariant(Line.CPU_3));

//cols = range.get_EntireColumn();

//cols.AutoFit();

Temp.Format(_T("H%d"),i);

range =

sheet.get_Range(COleVariant(Temp),COleVariant(Temp));

range.put_Value2(COleVariant(Line.CPU_4));

//cols = range.get_EntireColumn();

//cols.AutoFit();

Temp.Format(_T("I%d"),i);

range =

sheet.get_Range(COleVariant(Temp),COleVariant(Temp));

range.put_Value2(COleVariant(Line.MEM_Total));

//cols = range.get_EntireColumn();

//cols.AutoFit();

Temp.Format(_T("J%d"),i);

range =

sheet.get_Range(COleVariant(Temp),COleVariant(Temp));

range.put_Value2(COleVariant(Line.MEM_Free));

//cols = range.get_EntireColumn();

//cols.AutoFit();

Temp.Format(_T("K%d"),i);

range =

sheet.get_Range(COleVariant(Temp),COleVariant(Temp));

range.put_Value2(COleVariant(Line.MEM_Userate));

//cols = range.get_EntireColumn();

//cols.AutoFit();

i ++;

//SendMessage(hmyWnd,UM_MSG,IDC_INFO,i);

}

DataLineCnt = i - 1;

file.Close();

pThreadInfo->LineBoard = Line.Board;

Temp.Format(_T("J1"));

range =

sheet.get_Range(COleVariant(Temp),COleVariant(Temp));

ret = range.get_Value2();

FirtData = (long)ret.dblVal;

pThreadInfo->FirstData = FirtData;

Temp.Format(_T("J%d"),DataLineCnt);

range =

sheet.get_Range(COleVariant(Temp),COleVariant(Temp));

ret = range.get_Value2();

LastData = (long)ret.dblVal;

pThreadInfo->LastData = LastData;

CString Express;

//在L1单元格中保存 板子的信息

Temp.Format(_T("L1"));

range =

sheet.get_Range(COleVariant(Temp),COleVariant(Temp));

Express.Format(_T("%s--%s: %d - %d =

%dM"),szFileName2,Line.Board,LastData,FirtData,LastData-

FirtData);

range.put_Value2(COleVariant(Express));

DisplaySubThreadInfo(hmyWnd,SheetIndex,20);

//Temp.Format(_T("%s"),szFileName);

//sheet.put_Name(szFileName2);

CChartObjects

chartobjects;

CCharts

charts;

CChart chart;

LPDISPATCH lpDisp;

// Common OLE variants.

These are easy variants to use for

// calling

arguments.

COleVariant

covTrue((short)TRUE),

covFalse((short)FALSE);

// The cells are

populated. To start the chart,

// declare some long

variables and site the chart.

long left, top, width,

height;

left = 300+510;

top = 10+10;

width = 500;

height = 300;

lpDisp =

sheet.ChartObjects(covOptional);

ASSERT(lpDisp);

chartobjects.AttachDispatch(lpDisp); // Attach

the lpDisp pointer

// for ChartObjects to the

chartobjects

// object.

CChartObject chartobject

= chartobjects.Add(left, top, width,

height);

//defines the rectangle,

// adds a new chart at that rectangle

and

// assigns its object reference to a

// ChartObject variable named chartobject

chart.AttachDispatch(chartobject.get_Chart()); //

GetChart() returns

// LPDISPATCH, and this attaches

// it to your chart object.

VARIANT var; //

ChartWizard needs a Variant for the Source range.

var.vt = VT_DISPATCH; //

.vt is the usable member of the tagVARIANT

// Struct. Its value is a union of options.

var.pdispVal = lpDisp; //

Assign IDispatch pointer

// of the Source range to var.

DisplaySubThreadInfo(hmyWnd,SheetIndex,30);

chart.put_ChartType(long(4));

CChartTitle charttitle;

// 设置图表标题

chart.put_HasTitle(TRUE);

charttitle = chart.get_ChartTitle();

charttitle.put_Text(Line.Board+_T("_CPU使用率"));

CSeriesCollection serc;

CSeries sercies;

CAxis axis;

///

serc = chart.SeriesCollection(covOptional);

sercies = serc.NewSeries();

Temp.Format(_T("B%d"),DataLineCnt);

lpDisp = sheet.get_Range(COleVariant(_T("B1")),

COleVariant(Temp));

var.pdispVal = lpDisp;

sercies.put_XValues(var); // 设置X轴的数据

Temp.Format(_T("E%d"),DataLineCnt);

lpDisp =

sheet.get_Range(COleVariant(_T("E1")),COleVariant(Temp));

var.pdispVal = lpDisp;

sercies.put_Values(var); // 设置Y轴的数据

sercies.put_Name(_T("CPU_5S"));

DisplaySubThreadInfo(hmyWnd,SheetIndex,40);

///

serc = chart.SeriesCollection(covOptional);

sercies = serc.NewSeries();

Temp.Format(_T("B%d"),DataLineCnt);

lpDisp = sheet.get_Range(COleVariant(_T("B1")),

COleVariant(Temp));

var.pdispVal = lpDisp;

sercies.put_XValues(var); // 设置X轴的数据

Temp.Format(_T("F%d"),DataLineCnt);

lpDisp =

sheet.get_Range(COleVariant(_T("F1")),COleVariant(Temp));

var.pdispVal = lpDisp;

sercies.put_Values(var); // 设置Y轴的数据

sercies.put_Name(_T("CPU_15S"));

g_pProgress2->SetPos(50);

DisplaySubThreadInfo(hmyWnd,SheetIndex,50);

///

serc = chart.SeriesCollection(covOptional);

sercies = serc.NewSeries();

Temp.Format(_T("B%d"),DataLineCnt);

lpDisp = sheet.get_Range(COleVariant(_T("B1")),

COleVariant(Temp));

var.pdispVal = lpDisp;

sercies.put_XValues(var); // 设置X轴的数据

Temp.Format(_T("G%d"),DataLineCnt);

lpDisp =

sheet.get_Range(COleVariant(_T("G1")),COleVariant(Temp));

var.pdispVal = lpDisp;

sercies.put_Values(var); // 设置Y轴的数据

sercies.put_Name(_T("CPU_1M"));

DisplaySubThreadInfo(hmyWnd,SheetIndex,60);

///

serc = chart.SeriesCollection(covOptional);

sercies = serc.NewSeries();

Temp.Format(_T("B%d"),DataLineCnt);

lpDisp = sheet.get_Range(COleVariant(_T("B1")),

COleVariant(Temp));

var.pdispVal = lpDisp;

sercies.put_XValues(var); // 设置X轴的数据

Temp.Format(_T("H%d"),DataLineCnt);

lpDisp =

sheet.get_Range(COleVariant(_T("H1")),COleVariant(Temp));

var.pdispVal = lpDisp;

sercies.put_Values(var); // 设置Y轴的数据

sercies.put_Name(_T("CPU_5M"));

DisplaySubThreadInfo(hmyWnd,SheetIndex,70);

/

/

left = 300;

top = 10+10;

width = 500;

height = 300;

CChart chart1;

CChartObject chartobject1

= chartobjects.Add(left, top, width,

height);

//defines the rectangle,

// adds a new chart at that rectangle

and

// assigns its object reference to a

// ChartObject variable named chartobject

chart1.AttachDispatch(chartobject1.get_Chart());

// GetChart() returns

// LPDISPATCH, and this attaches

// it to your chart object

CChartTitle charttitle1;

chart1.put_ChartType(long(4));

// 设置图表标题

chart1.put_HasTitle(TRUE);

charttitle1 = chart1.get_ChartTitle();

Temp.Format(_T("_可用内存(MM_Total=%s)"),Line.MEM_Total);

charttitle1.put_Text(Line.Board+Temp);

DisplaySubThreadInfo(hmyWnd,SheetIndex,80);

///

serc = chart1.SeriesCollection(covOptional);

sercies = serc.NewSeries();

Temp.Format(_T("B%d"),DataLineCnt);

lpDisp = sheet.get_Range(COleVariant(_T("B1")),

COleVariant(Temp));

var.pdispVal = lpDisp;

sercies.put_XValues(var); // 设置X轴的数据

Temp.Format(_T("J%d"),DataLineCnt);

lpDisp =

sheet.get_Range(COleVariant(_T("J1")),COleVariant(Temp));

var.pdispVal = lpDisp;

sercies.put_Values(var); // 设置Y轴的数据

sercies.put_Name(_T("MEM_FREE"));

DisplaySubThreadInfo(hmyWnd,SheetIndex,90);

Sleep(1);

/

/

left = 300;

top = 10+310+10;

width = 500;

height = 300;

CChart chart2;

CChartObject chartobject2

= chartobjects.Add(left, top, width,

height);

//defines the rectangle,

// adds a new chart at that rectangle

and

// assigns its object reference to a

// ChartObject variable named chartobject

chart2.AttachDispatch(chartobject2.get_Chart());

// GetChart() returns

// LPDISPATCH, and this attaches

// it to your chart object

CChartTitle charttitle2;

chart2.put_ChartType(long(4));

// 设置图表标题

chart2.put_HasTitle(TRUE);

charttitle2 = chart2.get_ChartTitle();

charttitle2.put_Text(Line.Board+_T("_内存利用率"));

///

serc = chart2.SeriesCollection(covOptional);

sercies = serc.NewSeries();

Temp.Format(_T("B%d"),DataLineCnt);

lpDisp = sheet.get_Range(COleVariant(_T("B1")),

COleVariant(Temp));

var.pdispVal = lpDisp;

sercies.put_XValues(var); // 设置X轴的数据

Temp.Format(_T("K%d"),DataLineCnt);

lpDisp =

sheet.get_Range(COleVariant(_T("K1")),COleVariant(Temp));

var.pdispVal = lpDisp;

sercies.put_Values(var); // 设置Y轴的数据

sercies.put_Name(_T("MEM_USE_RATE"));

DisplaySubThreadInfo(hmyWnd,SheetIndex,95);

Sleep(1);

/

/

// ProcProgress.SetPos( ((float)SheetIndex / (float)FileCont)

* 100.0);

//book.put_ConflictResolution(2);

//book.SaveAs(COleVariant(szDirPath+_T("Data.xls")),covOptional,covOptional,covOptional,covOptional,covOptional,0,(COleVariant)(long)2,covOptional,covOptional,covOptional,(COleVariant)(long)2);

//XlSaveAsAccessMode vSaveAsAccessMode = xlNoChange ;

//XlFileFormat vFileFormat = xlWorkbookNormal ;

//XlSaveConflictResolutionvSaveConflictResolution =

xlLocalSessionChanges ;

//book.SaveAs(COleVariant(szDirPath+_T("Data.xls")),

-4143,_variant_t(""),_variant_t(""), _variant_t(false),

//_variant_t(false), 1, 2, _variant_t(false));

book.Save();

if((LastData- FirtData) < 0)

{

CString TmpPath;

TmpPath.Format(_T("%s\ExceptionFile\\%s.xlsx"),szDirPath,szCreateFileName);

book.SaveAs(COleVariant(TmpPath),covOptional,covOptional,covOptional,covOptional,covOptional,(long)0,covOptional,covOptional,covOptional,covOptional,covOptional);

}

DisplaySubThreadInfo(hmyWnd,SheetIndex,100);

if (FileCont != 0)

{

SendMessage(hmyWnd,UM_MSG,IDC_TT_PRG,(LPARAM)pThreadInfo);

}

if (nDisplayControl == 3)

{

//显示Excel表

app.put_Visible(TRUE);

app.put_UserControl(TRUE);

}

else if ((FirtData > LastData)&&(nDisplayControl ==

2))

{

//显示Excel表

app.put_Visible(TRUE);

app.put_UserControl(TRUE);

}

if (nDisplayControl == 1)

{

books.Close();

app.Quit();

}

else if ((nDisplayControl == 2) && ((FirtData <=

LastData)))

{

books.Close();

app.Quit();

}

Sleep(1);

lpDisp->Release();

serc.ReleaseDispatch();

sercies.ReleaseDispatch();

axis.ReleaseDispatch();

charttitle.ReleaseDispatch();

charttitle1.ReleaseDispatch();

charttitle2.ReleaseDispatch();

chart.ReleaseDispatch();

chart1.ReleaseDispatch();

chart2.ReleaseDispatch();

charts.ReleaseDispatch();

chartobject.ReleaseDispatch();

chartobject1.ReleaseDispatch();

chartobject2.ReleaseDispatch();

chartobjects.ReleaseDispatch();

range.ReleaseDispatch();

cols.ReleaseDispatch();

sheet.ReleaseDispatch();

sheets.ReleaseDispatch();

book.ReleaseDispatch();

books.ReleaseDispatch();

app.ReleaseDispatch();

if (nDisplayControl == 1)

{

books.Close();

app.Quit();

}

else if ((nDisplayControl == 2) && ((FirtData <=

LastData)))

{

books.Close();

app.Quit();

}

pThreadArray[SheetIndex] = NULL;

pThreadInfo->bBusy = FALSE;

return 0;

}

UINT CreateThread(LPVOID lpParam)

{

unsigned int i  = 1;

CFileFind finder;

HWND hmyWnd = (HWND)lpParam;

BOOL

bWorking = finder.FindFile(szFind,0);

while

(bWorking)

{

if (nCurThreadNum < nConfigThreadNum )

{

bWorking = finder.FindNextFile();

ThreadInfo[i].strPath = finder.GetFilePath();

ThreadInfo[i].szFileName2 = finder.GetFileName();

ThreadInfo[i].CurFileIndex = i;

ThreadInfo[i].hWnd = hmyWnd;

//创建线程,每一个文件用一个线程来处理,最多200个

if(pThreadArray[i]==NULL)

{

pThreadArray[i] =

AfxBeginThread(DataProc,(LPVOID)&(ThreadInfo[i]),THREAD_PRIORITY_HIGHEST,0,CREATE_SUSPENDED,NULL);

}

if(pThreadArray[i]!=NULL)

{

nCurThreadNum ++;

pThreadArray[i]->ResumeThread();

}

i++;

if ( nCurThreadNum > 50)

{

break;

}

Sleep(60);

}

else

{

Sleep(500);

}

SendMessage(hmyWnd,UM_MSG,IDC_CURFILE,nCurThreadNum);

}

return 1;

}

#endif

void CZTEAnalysisDataDlg::OnBnClickedButton2()

{

if (CheckProcIsRunning())

{

AfxMessageBox(_T("Processing,Please wait~~~"));

return;

}

TotalProg = 0;

nCurThreadNum = 0;

if(ptThread==NULL)

{

ptThread =

AfxBeginThread(CreateThread,(LPVOID)GetSafeHwnd(),THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED,NULL);

}

//如果创建成功,则恢复该线程的运行

if(ptThread!=NULL)

{

ptThread->ResumeThread();

}

}

void CZTEAnalysisDataDlg::OnNMCustomdrawProgress1(NMHDR

*pNMHDR, LRESULT *pResult)

{

LPNMCUSTOMDRAW pNMCD = reinterpret_cast(pNMHDR);

// TODO: 在此添加控件通知处理程序代码

*pResult = 0;

}

void CZTEAnalysisDataDlg::OnNMCustomdrawProgress2(NMHDR

*pNMHDR, LRESULT *pResult)

{

LPNMCUSTOMDRAW pNMCD = reinterpret_cast(pNMHDR);

// TODO: 在此添加控件通知处理程序代码

*pResult = 0;

}

void CZTEAnalysisDataDlg::OnNMCustomdrawProgress3(NMHDR

*pNMHDR, LRESULT *pResult)

{

LPNMCUSTOMDRAW pNMCD = reinterpret_cast(pNMHDR);

// TODO: 在此添加控件通知处理程序代码

*pResult = 0;

}

void CZTEAnalysisDataDlg::OnStnClickedTtPrg()

{

// TODO: 在此添加控件通知处理程序代码

}

LRESULT

CZTEAnalysisDataDlg::OnHandleMsg(WPARAM wParam,

LPARAM lParam)

{

int nTT = 0;

CString Tmp;

CString Name;

CString WriteInfo;

THREAD_INFO * pThreadInfo = NULL;

if (IDC_CURFILE == (int)wParam || IDC_INFO ==

(int)wParam)

{

Tmp.Format(_T("%d"),lParam);

}

else if (IDC_TT_PRG == (int)wParam)

{

TotalProg ++;

nCurThreadNum --;

Tmp.Format(_T("%d"),nCurThreadNum);

GetDlgItem(IDC_CURFILE)->SetWindowText(Tmp);

nTT = (int)(((float)(TotalProg)  * 100.0 /

(float)FileCont));

g_pProgress->SetPos(nTT);

Tmp.Format(_T("%d%%"),nTT);

pThreadInfo = (THREAD_INFO *)lParam;

Name = pThreadInfo->szFileName2;

Name.Replace(_T(".txt"),_T(""));

WriteInfo.Format(_T("%d:  %s

%s ==> %d

M\n"),pThreadInfo->CurFileIndex,Name,pThreadInfo->LineBoard,pThreadInfo->LastData-pThreadInfo->FirstData);

Recordfile.WriteString(WriteInfo);

Recordfile.Flush();

if ((pThreadInfo->LastData-pThreadInfo->FirstData) <

0)

{

nExceptionFileIndex ++;

WriteInfo.Format(_T("%d: %s  %s ==> %d

M\n"),nExceptionFileIndex,Name,pThreadInfo->LineBoard,pThreadInfo->LastData-pThreadInfo->FirstData);

RecordExceptfile.WriteString(WriteInfo);

RecordExceptfile.Flush();

}

if(!CheckProcIsRunning())

{

Recordfile.Close();

RecordExceptfile.Close();

}

}

else if (IDC_SUBPROG == (int)wParam)

{

int ThreadID = (long)lParam /1000;

int Per = (long)lParam00;

CString Info;

Tmp.Format(_T("%d%%"),Per);

Info.Format(_T("Sub Thread = %d"),ThreadID);

GetDlgItem(IDC_INFO)->SetWindowText(Info);

}

GetDlgItem(wParam)->SetWindowText(Tmp);

return 0;

}

LRESULT

CZTEAnalysisDataDlg::OnDestroy(WPARAM wParam,

LPARAM lParam)

{

Recordfile.Close();

RecordExceptfile.Close();

//显示Excel表

//app.put_Visible(TRUE);

//app.put_UserControl(TRUE);

//sheets.ReleaseDispatch();

//book.ReleaseDispatch();

//books.ReleaseDispatch();

//app.ReleaseDispatch();

return 0;

}

void CZTEAnalysisDataDlg::OnEnChangeEdit1()

{

int nTmp = 0;

UpdateData(TRUE);

ConfigThreadNum = ThreadNumber;

nTmp = _ttoi(ConfigThreadNum);

if ( (1 <= nTmp) && (nTmp <= 50))

{

nConfigThreadNum = nTmp;

}

else

{

AfxMessageBox(_T("Range:1 -- 50"));

}

}

void CZTEAnalysisDataDlg::OnEnChangeEdit2()

{

int nTmp = 0;

UpdateData(TRUE);

DispCtrl = DisolayControl;

nTmp = _ttoi(DispCtrl);

if ( (1 <= nTmp) && (nTmp <= 3))

{

nDisplayControl = nTmp;

if ( (2 == nTmp) || (nTmp == 3))

{

AfxMessageBox(_T("Because the computer resources are

limited,please do not open too much files,please close files

timely..."));

}

}

else

{

AfxMessageBox(_T("Range:1 -- 3\n1:Do not show any

files\n2:Show exception files\n3:Show all files"));

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值