亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? dlgbuildtin.cpp

?? 并行TIN生成算法, 基于DeWall算法理論實(shí)現(xiàn)
?? CPP
字號(hào):
// DlgBuildTIN.cpp : implementation file
//

#include "stdafx.h"
#include "TinApp.h"
#include "TinFrm.h"
#include "DlgBuildTIN.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CDlgBuildTIN dialog
typedef struct tagTIN_WORKER {
	TCS_S32	*stop;		// 停止標(biāo)志
	TCS_V00	*thrd;		// 線程句柄
	TCS_V00	*nven[2];	// 工作事件
	TCS_F64	*P;
	TIN_R	*R;
} TIN_WORKER;
typedef struct tagTIN_MASTER {
	TCS_S32	 *stop;		// 停止標(biāo)志
	TCS_V00	 *thrd;		// 線程句柄
	TCS_S32	  onnu;		// 線程數(shù)目
	TCS_V00	 *onpa;		// 線程參數(shù)
	TCS_F64	 *P;
	TCS_S32	  N;
	TIN_R	**R;
} TIN_MASTER;

CDlgBuildTIN::CDlgBuildTIN(CWnd* pParent /*=NULL*/)
	: CDialog(CDlgBuildTIN::IDD, pParent)
{
	m_pts = 0;
	m_num = 0;
	m_dim = 0;

	m_TT = 0;
	m_TN = 0;
	// 分配線程參數(shù)
	m_onnu = 2;
	TIN_WORKER *onpa = new TIN_WORKER[m_onnu];
	for (long i = 0; i < m_onnu; i++)
	{
		onpa[i].nven[0] = ::CreateEvent(0, 0, 0, 0);
		onpa[i].nven[1] = ::CreateEvent(0, 0, 1, 0);
		onpa[i].stop = &m_stop;
		onpa[i].thrd = 0;
		onpa[i].R = 0;
	}
	m_onpa = onpa;

	TIN_MASTER *mapa = new TIN_MASTER;
	mapa->stop = &m_stop;
	mapa->onnu = m_onnu;
	mapa->onpa = onpa;
	mapa->thrd = 0;
	m_mapa = mapa;

	//{{AFX_DATA_INIT(CDlgBuildTIN)
	m_dtm = _T("");
	m_dup = 0.01f;
	//}}AFX_DATA_INIT
}

CDlgBuildTIN::~CDlgBuildTIN()
{
	m_stop = 1;
	TIN_MASTER *mapa = (TIN_MASTER*)m_mapa;
	// 等待線程結(jié)束
	::WaitForSingleObject(mapa->thrd, INFINITE);
	// 釋放資源
	TIN_WORKER *onpa = (TIN_WORKER*)m_onpa;
	for (long i = 0; i < mapa->onnu; i++)
	{
		::CloseHandle(onpa[i].nven[0]);
		::CloseHandle(onpa[i].nven[1]);
	}
	delete []onpa;	delete mapa;
}

void CDlgBuildTIN::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDlgBuildTIN)
	DDX_Control(pDX, IDC_PROGRESS, m_progress);
	DDX_Text(pDX, IDC_TIME_STATIC, m_dtm);
	DDX_Text(pDX, IDC_DUP_EDIT, m_dup);
	DDV_MinMaxFloat(pDX, m_dup, 0.f, 10.f);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CDlgBuildTIN, CDialog)
	//{{AFX_MSG_MAP(CDlgBuildTIN)
	ON_BN_CLICKED(IDC_BUILD_BUTTON, OnBUILD)
	ON_BN_CLICKED(IDC_STOPB_BUTTON, OnSTOPB)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDlgBuildTIN message handlers

// 工作線程

TCS_U32 WINAPI WorkerThread(LPVOID lpParam)
{
	TIN_WORKER *wopa = (TIN_WORKER*)lpParam;

	while (1)
	{
		::WaitForSingleObject(wopa->nven[0], INFINITE);
		if (*(wopa->stop) == 1)
			break;

		if (wopa->R)
			ConTen2(wopa->R, wopa->P, wopa->stop);

		wopa->R = 0;

		::SetEvent(wopa->nven[1]);
		if (*(wopa->stop) == 1)
			break;
	}

	::SetEvent(wopa->nven[1]);
	wopa->thrd = 0;
	wopa->R = 0;

	return 0;
}
// 控制線程

TCS_U32 WINAPI MasterThread(LPVOID lpParam)
{
	TIN_MASTER *mapa = (TIN_MASTER*)lpParam;

	// 調(diào)度線程
	TIN_WORKER *onpa = (TIN_WORKER*)mapa->onpa;
	TCS_V00 **nven = new TCS_V00*[mapa->onnu];
	for (long i = 0; i < mapa->onnu; i++)
		nven[i] = onpa[i].nven[1];

	TCS_F64 *P = mapa->P;
	TCS_S32  N = mapa->N;
	TIN_R **R = mapa->R;
	for (long k = 0; k < N; k++)
	{
		// 等待線程空閑
		TCS_U32 idx = ::WaitForMultipleObjects(mapa->onnu, nven, 0, INFINITE);
		if (idx >= WAIT_OBJECT_0 && idx < WAIT_OBJECT_0 + mapa->onnu)
		{
			idx = idx - WAIT_OBJECT_0;
			onpa[idx].P = P;
			onpa[idx].R = R[k];
			::SetEvent(onpa[idx].nven[0]);
		}
		// 如果中途終止
		if (*(mapa->stop) == 1)
			break;
	}
	// 釋放內(nèi)存資源
	delete []nven;
	// 等待本次任務(wù)完成
	for (long i = 0; i < mapa->onnu; i++)
	{
		while (1)
		{
			if (onpa[i].R == 0 || onpa[i].thrd == 0)
				break;
			else
				::Sleep(2);
		}
	}
	// 結(jié)束工作線程
	*(mapa->stop) = 1;
	for (long i = 0; i < mapa->onnu; i++)
	{
		::SetEvent(onpa[i].nven[0]);
		::WaitForSingleObject(onpa[i].thrd, INFINITE);
	}
	// 本線程結(jié)束
	mapa->thrd = 0;

	return 0;
}

void CDlgBuildTIN::Init(void *pts, long num, long dim, CTcsTan2 *Tan, TIN_T **TT, long *TN, TIN_R **TR, long *RN)
{
	m_pts = pts;
	m_num = num;
	m_dim = dim;

	m_oTan = Tan;

	m_TT = TT;
	m_TN = TN;

	m_TR = TR;
	m_RN = RN;
}

void CDlgBuildTIN::OnBUILD() 
{
	Gray(1);
	m_nProc = 1;

	Build();

	m_nProc = 0;
	Gray(0);
}

void CDlgBuildTIN::Gray(BOOL bGray)
{
	GetDlgItem(IDC_DUP_EDIT)->EnableWindow(!bGray);
	GetDlgItem(IDC_STOPB_BUTTON)->EnableWindow(bGray);
	GetDlgItem(IDC_BUILD_BUTTON)->EnableWindow(!bGray);

/*	CTinFrm* pFrm = (CTinFrm*)AfxGetMainWnd();
	if (pFrm)
	{
		CMenu* pMenu = pFrm->GetMenu();
		long cnt = pMenu->GetMenuItemCount();
		for (long i = 0; i < cnt; i++)
		{
			if (!bGray)
				::EnableMenuItem(pMenu->m_hMenu, i, MF_BYPOSITION | MF_ENABLED);
			else
				::EnableMenuItem(pMenu->m_hMenu, i, MF_BYPOSITION | MF_GRAYED);
		}
		::DrawMenuBar(pFrm->m_hWnd);

		::PeekAndPump();
	}

	pFrm->HideToolButton(bGray);*/
}

void CDlgBuildTIN::OnSTOPB() 
{
	m_oTan->Stop();
	m_nProc = 0;
	m_stop = 1;
}

void CDlgBuildTIN::Build(void)
{
	if (!UpdateData(1))
	{
		AfxMessageBox("請(qǐng)輸入[重合點(diǎn)限差]!");
		return;
	}
	m_progress.SetRange32(0, m_num);

	if (m_dim != 2)
		return;
	m_oTan->Make((TCS_F64*)m_pts, m_num, m_dup);
	// 檢測(cè)構(gòu)網(wǎng)分區(qū)是否完成
	TCS_S32 TN, PN;	TCS_F64 DT;
	while (1)
	{
		if (m_oTan->Done())
			break;
		::Sleep(10);	::PeekAndPump();
#ifdef TSET_SIN
		TN = 0, PN = 0;		m_oTan->Proc(PN, TN);
		m_dtm.Format("%d/%d", PN, TN);	UpdateData(0);
#endif
	}
	TN = 0, PN = 0;	m_oTan->Proc(PN, TN); DT = m_oTan->Time();
	m_dtm.Format("%.2lf/%d/%d", DT, PN, TN);	UpdateData(0);

	TCS_TMB btm;	::_ftime_s(&btm);

	if (*m_TR)
		delete []*m_TR;
	*m_TR = 0;	*m_RN = 0;

	TCS_S32 RN;
	TIN_R **TR = m_oTan->TinR(RN);
	if (1)
	{
		TIN_G *G = m_oTan->TinG();
		// 利用線程調(diào)度分區(qū)構(gòu)網(wǎng)
		m_stop = 0;
		TIN_WORKER *onpa = (TIN_WORKER*)m_onpa;
		TIN_MASTER *mapa = (TIN_MASTER*)m_mapa;
		for (long i = 0; i < mapa->onnu; i++)
		{
			onpa[i].R = 0;
			::SetEvent(onpa[i].nven[1]);
			::ResetEvent(onpa[i].nven[0]);
			onpa[i].thrd = ::CreateThread(0, 0, WorkerThread, &onpa[i], 0, 0);
		}
		mapa->P = (TCS_F64*)m_pts;	mapa->N = RN;	mapa->R = TR;
		mapa->thrd = ::CreateThread(0, 0, MasterThread, mapa, 0, 0);

		// 檢測(cè)進(jìn)度:完成點(diǎn)數(shù)與三角形數(shù)
		while (1)
		{
			::Sleep(10);	TN = 0, PN = 0;		m_oTan->Proc(PN, TN);
			m_dtm.Format("%d/%d", PN, TN);	UpdateData(0);
			if (!mapa->thrd)	break;
			::PeekAndPump();
		}
	}

	if (RN)
	{
		TIN_R *R = new TIN_R[RN];
		for (long i = 0; i < RN; i++)
		{
			R[i].ASL = TR[i]->ASL;
			R[i].ATL = TR[i]->ATL;
			R[i].AXI = TR[i]->AXI;
			R[i].AXV = TR[i]->AXV;
			R[i].BSL = TR[i]->BSL;
			R[i].G   = TR[i]->G;
			R[i].S	 = TR[i]->S;
			R[i].SCO[0] = TR[i]->SCO[0];
			R[i].SCO[1] = TR[i]->SCO[1];
		}
		*m_TR = R;	*m_RN = RN;
	}
	delete []TR;

	TCS_TMB etm;	::_ftime_s(&etm);

	// 獲得三角形
	if (*m_TT)
		delete [](*m_TT);
	*m_TN = 0;	*m_TT = 0;
	*m_TT = m_oTan->TinT(*m_TN);
	// 檢查是否存在重復(fù)三角形
	if (0)
	{
		long n = *m_TN;
		TIN_T *T = *m_TT;
		for (long i = 0; i < n - 1; i++)
		{
			for (long k = i + 1; k < n; k++)
			{
				if ((T[i].pid[0] == T[k].pid[0] && T[i].pid[1] == T[k].pid[1] && T[i].pid[2] == T[k].pid[2]) ||
					(T[i].pid[1] == T[k].pid[0] && T[i].pid[2] == T[k].pid[1] && T[i].pid[0] == T[k].pid[2]) ||
					(T[i].pid[2] == T[k].pid[0] && T[i].pid[0] == T[k].pid[1] && T[i].pid[1] == T[k].pid[2]))
				{
					AfxMessageBox("重復(fù)三角形!");
					return;
				}
			}
		}
	}
	// 獲得指標(biāo)數(shù)據(jù)
	DT += (::difftime(etm.time, btm.time) + (etm.millitm - btm.millitm) / 1000.0);
	TN = 0, PN = 0;	m_oTan->Proc(PN, TN);	m_dtm.Format("%.2lf/%d/%d", DT, PN, TN);	UpdateData(0);

	if (!m_nProc)
		AfxMessageBox("構(gòu)建停止!");
	else
		AfxMessageBox("構(gòu)建完畢!");
}

void CDlgBuildTIN::OnCancel() 
{
	if (m_nProc)
		return;

	CDialog::OnCancel();
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一二三四社区欧美黄| 欧美一级视频精品观看| 国产亚洲欧美色| 捆绑调教美女网站视频一区| 日韩一区二区三区在线视频| 久久99日本精品| 国产午夜亚洲精品羞羞网站| 99视频精品在线| 亚洲国产日韩一区二区| 欧美精品粉嫩高潮一区二区| 久久精品久久99精品久久| 欧美精品一区二区高清在线观看| 国产精品 欧美精品| 自拍偷拍亚洲综合| 欧美日韩精品一区视频| 奇米影视在线99精品| 久久久久成人黄色影片| 99re66热这里只有精品3直播| 亚洲精品国产视频| 正在播放亚洲一区| 国产精品综合av一区二区国产馆| 国产精品拍天天在线| 日本二三区不卡| 麻豆国产一区二区| 中文字幕在线视频一区| 欧美日韩在线一区二区| 国产精品自在欧美一区| 亚洲乱码国产乱码精品精的特点| 欧美一区欧美二区| 成人av网站在线观看免费| 五月天欧美精品| 欧美激情一区在线| 91精品国产综合久久福利| 成人理论电影网| 视频一区二区不卡| 亚洲欧洲无码一区二区三区| 欧美美女黄视频| 本田岬高潮一区二区三区| 日韩在线一区二区| 亚洲视频一二三| 精品久久一区二区三区| 欧美综合欧美视频| 国产成人在线视频网站| 午夜久久久久久久久久一区二区| 欧美激情一区二区三区全黄| 91精品国产综合久久婷婷香蕉 | 国产成人在线免费观看| 亚洲国产综合人成综合网站| 国产欧美一区二区精品性色超碰 | 欧美日韩午夜在线视频| 成人午夜看片网址| 美腿丝袜亚洲三区| 亚洲二区在线观看| 亚洲欧美日韩中文播放| 国产午夜精品一区二区三区嫩草| 欧美日韩精品一区二区三区四区| 丁香激情综合国产| 激情图片小说一区| 免费成人结看片| 亚洲国产精品视频| 国产精品久久久久久久久免费相片| 日韩欧美一区二区三区在线| 欧美日韩高清影院| 在线观看一区二区视频| 99免费精品视频| 波多野结衣在线一区| 国产乱妇无码大片在线观看| 蜜桃精品视频在线| 日日摸夜夜添夜夜添精品视频| 一区二区免费在线| 亚洲少妇30p| 亚洲特级片在线| 亚洲人吸女人奶水| 国产精品色在线| 中文字幕不卡在线播放| 欧美激情综合五月色丁香小说| 国产亚洲一区字幕| 国产三级精品视频| 中文字幕国产精品一区二区| 国产女同性恋一区二区| 国产欧美精品在线观看| 欧美激情在线免费观看| 国产精品人成在线观看免费 | 国产日产精品1区| 国产日产欧美一区二区三区| 欧美国产丝袜视频| ...av二区三区久久精品| 亚洲美女在线国产| 亚洲影视在线观看| 日韩成人一级片| 加勒比av一区二区| 国产 日韩 欧美大片| 成人av高清在线| 91福利小视频| 日韩免费视频一区二区| 久久亚区不卡日本| 亚洲欧洲一区二区在线播放| 亚洲精品免费视频| 色综合久久中文字幕综合网| 国产精品色噜噜| 26uuu色噜噜精品一区二区| 久久久久99精品国产片| 国产精品丝袜在线| 亚洲国产精品久久久男人的天堂| 综合在线观看色| 91免费视频网址| 久久久久国产精品厨房| 国产精品久久久久久久久免费丝袜 | 一本色道亚洲精品aⅴ| 欧美色窝79yyyycom| 欧美一区二区三区婷婷月色| 久久精品欧美一区二区三区不卡| 中文字幕一区二区5566日韩| 亚洲第一电影网| 国产精品一线二线三线| 91免费视频网址| 精品粉嫩aⅴ一区二区三区四区| 中文字幕在线不卡视频| 日韩一区精品视频| av电影一区二区| 欧美一级高清大全免费观看| 国产精品麻豆99久久久久久| 午夜激情一区二区| 成人免费视频视频在线观看免费| 欧洲日韩一区二区三区| 欧美精品一区二区三区一线天视频| 亚洲欧洲国产日韩| 蜜臀av亚洲一区中文字幕| 91麻豆国产精品久久| 日韩精品一区二区三区视频 | 国产a久久麻豆| 国产成人av资源| 91 com成人网| 亚洲日本丝袜连裤袜办公室| 久久国产精品一区二区| 色婷婷激情一区二区三区| 久久久久久久久久久久久女国产乱| 尤物视频一区二区| 成人性视频网站| 精品国产一区二区精华| 亚洲国产日韩综合久久精品| 不卡视频在线看| 精品久久久久久综合日本欧美| 亚洲午夜精品网| 91色九色蝌蚪| 中文字幕高清不卡| 国产在线不卡一卡二卡三卡四卡| 欧美日韩视频在线一区二区| 136国产福利精品导航| 国精产品一区一区三区mba桃花| 欧美日韩国产首页在线观看| 亚洲柠檬福利资源导航| 成人爱爱电影网址| 久久久久99精品国产片| 精品一区二区综合| 日韩一区二区三区免费看| 亚洲午夜久久久久久久久电影院| 99精品欧美一区| 中文字幕不卡在线观看| 国产91精品露脸国语对白| 2020国产精品| 国产一区二区0| 久久蜜桃香蕉精品一区二区三区| 精品一区二区三区免费播放 | 成人涩涩免费视频| 国产亚洲精品bt天堂精选| 国产一区二区免费在线| 久久久无码精品亚洲日韩按摩| 麻豆视频一区二区| 日韩精品在线一区二区| 久久成人免费网| 精品国精品自拍自在线| 国产一区二区主播在线| 久久久久久亚洲综合| 国产成人免费av在线| 国产欧美精品一区二区色综合| 东方aⅴ免费观看久久av| 国产日韩精品视频一区| 成人av综合一区| 一区二区三区四区蜜桃| 欧美日韩一区二区三区在线 | 亚洲高清免费观看高清完整版在线观看 | 亚洲福利一二三区| 欧美日韩国产一级片| 天天色天天爱天天射综合| 欧美一区2区视频在线观看| 麻豆成人av在线| 国产蜜臀av在线一区二区三区| 不卡的电影网站| 一区二区三区免费网站| 3751色影院一区二区三区| 国内外成人在线| 中文字幕亚洲精品在线观看| 91成人免费电影| 国产精品久久久久一区| 国产成人精品免费视频网站| 国产精品人妖ts系列视频| 欧洲视频一区二区| gogo大胆日本视频一区| 一区二区三区精品在线观看|