// ComputeDialog.cpp : 实现文件 // #include "stdafx.h" #include "Ex13.h" #include "ComputeDialog.h" CEvent g_eventStart; CEvent g_eventKill; int g_nCount = 0; UINT ComputeThreadProc(LPVOID pParam) { volatile int nTemp; ::WaitForSingleObject(g_eventStart, INFINITE); for (g_nCount = 0; g_nCount < CComputeDialog::nMaxCount; g_nCount++) { for (nTemp = 0; nTemp < 100000; ++nTemp) { } if (::WaitForSingleObject(g_eventKill, 0) == WAIT_OBJECT_0) { break; } } ::PostMessage((HWND)pParam, WM_THREADFINISHED, 0, 0); g_nCount = 0; return 0; } // CComputeDialog 对话框 IMPLEMENT_DYNAMIC(CComputeDialog, CDialog) CComputeDialog::CComputeDialog(CWnd* pParent /*=NULL*/) : CDialog(CComputeDialog::IDD, pParent) { } CComputeDialog::~CComputeDialog() { } void CComputeDialog::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CComputeDialog, CDialog) ON_BN_CLICKED(IDC_START, &CComputeDialog::OnBnClickedStart) ON_BN_CLICKED(IDC_CANCEL, &CComputeDialog::OnBnClickedCancel) ON_WM_TIMER() ON_MESSAGE(WM_THREADFINISHED, OnThreadFinished) END_MESSAGE_MAP() LRESULT CComputeDialog::OnThreadFinished(WPARAM wParam, LPARAM lParam) { //GetDlgItem(IDC_START)->EnableWindow(TRUE); //KillTimer(1); ////CDialog::OnOK(); //return 0; ////////////////////////////////////////////// return 0; } // CComputeDialog 消息处理程序 void CComputeDialog::OnBnClickedStart() { m_nTimer = SetTimer(1, 100, NULL); ASSERT(m_nTimer != 0); GetDlgItem(IDC_START)->EnableWindow(FALSE); g_eventStart.SetEvent(); } void CComputeDialog::OnBnClickedCancel() { g_eventKill.SetEvent(); } void CComputeDialog::OnTimer(UINT_PTR nIDEvent) { CProgressCtrl* pBar = (CProgressCtrl*) GetDlgItem(IDC_PROGRESS1); pBar->SetPos(g_nCount*100 / nMaxCount); CDialog::OnTimer(nIDEvent); } BOOL CComputeDialog::OnInitDialog() { CDialog::OnInitDialog(); // TODO: 在此添加额外的初始化 AfxBeginThread(ComputeThreadProc, GetSafeHwnd()); return TRUE; // return TRUE unless you set the focus to a control // 异常: OCX 属性页应返回 FALSE }