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

📄 ena---mfcdoc.cpp

📁 开发环境:Visual C++ .net2003 功能介绍:神经网络算法实验;分Console版本和MFC版本;主要用来求解TSP问题。
💻 CPP
字号:
// ENA---MFCDoc.cpp : implementation of the CENAMFCDoc class
//

#include "stdafx.h"
#include "ENA---MFC.h"

#include "ENA---MFCDoc.h"
#include "ENA---MFCView.h"
#include"WSTSPENA.h"
#include <process.h>
#include ".\ena---mfcdoc.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

bool g_bSimula = false;
// CENAMFCDoc
void WorkingThread(void *p_pView);
void WorkingThread2(void *_NULL);
CString g_FileName = "";
bool isThreadOn = true;
bool isOpenOn = false;
bool g_OpenOnce = false;
bool g_RunOn = false;
bool g_Pause = false;
bool g_Stop = true;

IMPLEMENT_DYNCREATE(CENAMFCDoc, CDocument)

BEGIN_MESSAGE_MAP(CENAMFCDoc, CDocument)
	ON_COMMAND(IDM_SIMULA, OnSimula) 
	ON_UPDATE_COMMAND_UI(IDM_SIMULA, OnUpDataSimula)
	ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
	ON_UPDATE_COMMAND_UI(ID_FILE_OPEN, OnUpdateFileOpen)
	ON_COMMAND(ID_PAUSE, OnPause)
	ON_UPDATE_COMMAND_UI(ID_PAUSE, OnUpdatePause)
	ON_COMMAND(ID_STOP, OnStop)
	ON_UPDATE_COMMAND_UI(ID_STOP, OnUpdateStop)
END_MESSAGE_MAP()


// CENAMFCDoc construction/destruction

CENAMFCDoc::CENAMFCDoc()
{
	// TODO: add one-time construction code here

}

CENAMFCDoc::~CENAMFCDoc()
{
}

BOOL CENAMFCDoc::OnNewDocument()
{
	if (!CDocument::OnNewDocument())
		return FALSE;

	// TODO: add reinitialization code here
	// (SDI documents will reuse this document)

	return TRUE;
}




// CENAMFCDoc serialization

void CENAMFCDoc::Serialize(CArchive& ar)
{
	if (ar.IsStoring())
	{
		// TODO: add storing code here
	}
	else
	{
		// TODO: add loading code here
	}
}


// CENAMFCDoc diagnostics

#ifdef _DEBUG
void CENAMFCDoc::AssertValid() const
{
	CDocument::AssertValid();
}

void CENAMFCDoc::Dump(CDumpContext& dc) const
{
	CDocument::Dump(dc);
}
#endif //_DEBUG


// CENAMFCDoc commands
void CENAMFCDoc::OnUpDataSimula(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable(!g_RunOn);
}
void CENAMFCDoc::OnSimula()
{
	g_RunOn = true;
	isOpenOn = true;
	isThreadOn = true;
	g_Pause = false;
	g_Stop = false;

	//WSTSPENA l_TSP;
	//l_TSP.Initial("51.txt");
	//int i;
	//int l_max = 0;
	//for(i = 0; i < l_TSP.m_CityNum; ++i)
	//{
	//	if(l_max < l_TSP.m_pCity[i].x) l_max = l_TSP.m_pCity[i].x;
	//	if(l_max < l_TSP.m_pCity[i].y) l_max = l_TSP.m_pCity[i].y;
	//}
	//((CENAMFCView*)(m_viewList.GetHead()))->m_pTvRate = (1.0*500)/l_max;
	//((CENAMFCView*)(m_viewList.GetHead()))->m_pTSP = &l_TSP;
	//((CENAMFCView*)(m_viewList.GetHead()))->StartDraw();

	//do{
	//	l_TSP.AdjustTempPoint();
	//	l_TSP.AdjustParament();	

	//	//((CENAMFCView*)(m_viewList.GetHead()))->StartDraw();
	//	this->UpdateAllViews(((CENAMFCView*)(m_viewList.GetHead())));
	//	((CENAMFCView*)(m_viewList.GetHead()))->m_pTSP = &l_TSP;
	//	//int a = m_viewList.GetSize();
	//	((CENAMFCView*)(m_viewList.GetHead()))->StartDraw();
	//	this->UpdateAllViews(((CENAMFCView*)(m_viewList.GetHead())));		
	//	//l_TSP.FitCity();
	//	//AfxMessageBox(_T("Next!"));
	//	//Sleep(1000);
	//}while(!l_TSP.FitCity());

	//((CENAMFCView*)(m_viewList.GetHead()))->m_pTSP = &l_TSP;
	//((CENAMFCView*)(m_viewList.GetHead()))->StartDraw();
	//CString str;
	//str.Format(_T("所有的路径总长为:%f"), l_TSP.ComputeCityRouteDist());	
	//((CENAMFCView*)(m_viewList.GetHead()))->TextDraw(200, 0, str);


	CENAMFCView *l_pCurView = (CENAMFCView *)(m_viewList.GetHead());
	_beginthread(WorkingThread, NULL, (void *)l_pCurView);

	//WSTSPENA l_TSP;
	//l_TSP.Initial("51.txt");
	//int i;
	//int l_max = 0;
	//for(i = 0; i < l_TSP.m_CityNum; ++i)
	//{
	//	if(l_max < l_TSP.m_pCity[i].x) l_max = l_TSP.m_pCity[i].x;
	//	if(l_max < l_TSP.m_pCity[i].y) l_max = l_TSP.m_pCity[i].y;
	//}
	//l_pCurView->m_pTvRate = (1.0*500)/l_max;
	//l_pCurView->m_pTSP = &l_TSP;
	//l_pCurView->StartDraw();

	//do{
	//	l_TSP.AdjustTempPoint();
	//	l_TSP.AdjustParament();	

	//	//((CENAMFCView*)(m_viewList.GetHead()))->StartDraw();
	//	this->UpdateAllViews(((CENAMFCView*)(m_viewList.GetHead())));
	//	l_pCurView->m_pTSP = &l_TSP;
	//	//int a = m_viewList.GetSize();
	//	l_pCurView->StartDraw();
	//	this->UpdateAllViews(((CENAMFCView*)(m_viewList.GetHead())));		
	//	//l_TSP.FitCity();
	//	//AfxMessageBox(_T("Next!"));
	//	//Sleep(1000);
	//}while(!l_TSP.FitCity());

	//l_pCurView->m_pTSP = &l_TSP;
	//l_pCurView->StartDraw();
	//CString str;
	//str.Format(_T("所有的路径总长为:%f"), l_TSP.ComputeCityRouteDist());	
	//l_pCurView->TextDraw(200, 0, str);

	//char *str = new char[100];
	//sprintf(str, "说的路径总长为:%f", l_TSP.ComputeCityRouteDist());
	//AfxMessageBox(_T((LPCTSTR)str));	
}

char *MakePathStr(char *str)
{
	int i = 0;
	char *newStr = new char[255];
	while(*str)
	{
		if(*str == '\\')
		{
			newStr[i++] = '\\';
		}
		newStr[i++] = *str++;
	}
	newStr[i] = 0;
	return newStr;
}
void WorkingThread(void *p_pView)
{
	CENAMFCView *l_pCurView =(CENAMFCView*)p_pView;

	g_bSimula = !g_bSimula;

	//if(g_FileName.Compare("") == 0){return ;}
	WSTSPENA l_TSP;		
	
	char fileName[255] = {0};
	PCHAR fileName2;
	//fileName = (LPTSTR)(LPCTSTR)g_FileName;
	sprintf(fileName, "%s", g_FileName);
	fileName2 = MakePathStr(fileName);
	//AfxMessageBox(fileName);

	if(!l_TSP.Initial(fileName2))
	{
		AfxMessageBox(_T("文件打开失败"));
		g_RunOn = false;
		isOpenOn = false;
		_endthread();
		return ;
	}
	//l_TSP.Initial(_T("F:\\研究生\\代码测试\\48.txt"));
	int i;
	int l_max = 0;
	for(i = 0; i < l_TSP.m_CityNum; ++i)
	{
		if(l_max < l_TSP.m_pCity[i].x) l_max = l_TSP.m_pCity[i].x;
		if(l_max < l_TSP.m_pCity[i].y) l_max = l_TSP.m_pCity[i].y;
	}
	l_pCurView->m_pTvRate = (1.0*500)/l_max;
	l_pCurView->m_pTSP = &l_TSP;
	l_pCurView->StartDraw();

	do{
		//if(!isThreadOn)
		//{
		//	g_RunOn = false;
		//	isOpenOn = false;
		//	return ;
		//}

		while(g_Pause)
		{
			Sleep(50);
		}
		if(g_Stop)
		{
			g_RunOn = false;
			isOpenOn = false;
			_endthread();
			return ;
		}

		l_TSP.AdjustTempPoint();
		l_TSP.AdjustParament();	

		//((CENAMFCView*)(m_viewList.GetHead()))->StartDraw();		
		l_pCurView->m_pTSP = &l_TSP;
		//int a = m_viewList.GetSize();
		l_pCurView->StartDraw();			
		//l_TSP.FitCity();
		//AfxMessageBox(_T("Next!"));
		//Sleep(1000);
	}while(!l_TSP.FitCity());

	l_pCurView->m_pTSP = &l_TSP;
	l_pCurView->StartDraw();
	CString str;
	str.Format(_T("所有的路径总长为:%f"), l_TSP.ComputeCityRouteDist());	
	l_pCurView->TextDraw(200, 0, str);

	l_TSP.ShowResultRoute();

	g_RunOn = false;
	isOpenOn = false;
	_endthread();
	return ;
}
void CENAMFCDoc::OnFileOpen()
{
	if(isOpenOn) return ;
	isOpenOn = true;
	_beginthread(WorkingThread2, NULL, NULL);	
}
 
void WorkingThread2(void *_NULL)
{
	// TODO: 在此添加命令处理程序代码
	CFileDialog l_FileDlg(TRUE, NULL, NULL, OFN_FILEMUSTEXIST, "CityFiles|*.txt||*.*||");
	if(l_FileDlg.DoModal() == IDOK)
	{
		isThreadOn = false;
		g_FileName = l_FileDlg.GetPathName();
	}
	else
	{
		g_FileName = "";
	}
	isOpenOn = false;
}
void CENAMFCDoc::OnUpdateFileOpen(CCmdUI *pCmdUI)
{
	// TODO: 在此添加命令更新用户界面处理程序代码
	pCmdUI->Enable(!g_OpenOnce);
}

void CENAMFCDoc::OnPause()
{
	// TODO: 在此添加命令处理程序代码
	g_Pause = !g_Pause;
}

void CENAMFCDoc::OnUpdatePause(CCmdUI *pCmdUI)
{
	// TODO: 在此添加命令更新用户界面处理程序代码
	pCmdUI->Enable(g_RunOn);
	if(g_Pause) pCmdUI->SetText("继续执行");
	else pCmdUI->SetText("算法暂停");

}

void CENAMFCDoc::OnStop()
{
	// TODO: 在此添加命令处理程序代码
	g_Stop = true;
}

void CENAMFCDoc::OnUpdateStop(CCmdUI *pCmdUI)
{
	// TODO: 在此添加命令更新用户界面处理程序代码
	if(g_Stop)
	{
		g_RunOn = false;

		g_bSimula = false;		
	}
	pCmdUI->Enable(!g_Pause && g_RunOn);

	if(g_RunOn) g_OpenOnce = true;

}

⌨️ 快捷键说明

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