Exemplo n.º 1
0
// The code behind the constructor.
void DebugHelper::Initialize()
{
    // Create a heap to contain our memory allocations.
    heapHandle = HeapCreate( 0, 1, 0 );
    if ( heapHandle == NULL )
    {
        OutputDebugStringW(L"DebugHelper::Initialize(): Failed to create heap!  Unable to create data buffers for formatted output strings.\n");
        goto Cleanup;
    }

    //
    // Allocate space for the two buffers.
    //

    // Buffer #1: final output string.
    debugOutputBuffer = static_cast<PWCHAR>(HeapAlloc(heapHandle, HEAP_ZERO_MEMORY, debugOutputBufferLen));

    // Buffer #2: intermediate output string; contains data prepended to every
    //            debug output string, such as a timestamp.
    debugOutputBufferTemp = static_cast<PWCHAR>(HeapAlloc(heapHandle, HEAP_ZERO_MEMORY, debugOutputBufferLen));

    // Make sure we either have both buffers, or neither buffer.
    if (debugOutputBuffer == NULL || 
        debugOutputBufferTemp == NULL)
    {
        OutputDebugStringW(L"\n"
                           L"DebugHelper::Initialize(): Failed to create formatted output string buffers!\n"
                           L"                           Debug output strings will be displayed _without_ expanding format fields (i.e., \"%d\").\n\n");

        // Free any partial memory already allocated.
        CleanupMem();

        goto Cleanup;
    }

    // Report that the class is completely initialized.
    OutputDebugStringW(L"DebugHelper::Initialize(): Initialization completed successfully.\n");

 Cleanup:
    return;
}
Exemplo n.º 2
0
// The code behind the destructor.
void DebugHelper::Finalize()
{
    OutputDebugStringW(L"DebugHelper::Finalize(): Finalize called, cleaning up object.\n");
    CleanupMem();
}
Exemplo n.º 3
0
	//************************************************
	//*测试任务执行过程
	//************************************************
	VOID t1::UpdateState()
	{
		switch (m_TestState)
		{
			//呈现指导语
		case STATE_DISPLAYINSTURCTION:
			break;
			//呈现目标
		case STATE_DISPLAYOBJ:
			if (abs(JoyX)>20 || abs(JoyY)>20)
			{
				if (QueryPerformanceFrequency(&litmp))
				{
					dfFreq = (double)litmp.QuadPart;// 获得计数器的时钟频率
					m_SampleInt = m_MoveInt * dfFreq;
				}
				QueryPerformanceCounter(&litmp);
				QPart1 = litmp.QuadPart;           // 获得初始值
				dfTotalMove = 0;
				dfTotalPause = 0;
				m_PointTime[m_PointNum] = QPart1 / dfFreq * 1000;
				m_PostSpeedX[m_PointNum] = 0;
				m_PostSpeedY[m_PointNum] = 0;
				m_TestState = STATE_MOVINGOBJ;
			}
			break;
			//测试任务执行
		case STATE_MOVINGOBJ:
			if (dfTotalMove<m_TrialTime)//m_Setting.m_ExperTime)
			{
				//间隔40ms采样一次
				do
				{
					Sleep(1);
					QueryPerformanceCounter(&litmp);
					QPart2 = litmp.QuadPart;         //获得中止值
					dfMinus = (double)(QPart2 - QPart1);
					//dfTim = dfMinus / dfFreq;        // 获得对应的时间值,单位为秒	
				} while (dfMinus<m_SampleInt);
				dfTim = dfMinus / dfFreq;  // 获得对应的时间值,单位为秒
				QPart1 = QPart2;           // 获得初始值
				dfTotalMove = dfTotalMove + dfTim;
				//暂停点
				if (m_Setting.m_Pause == 1)
				{
					dfTotalPause = dfTotalPause + dfTim;
					if (dfTotalPause>60)
					{
						dfTotalPause = 0;
						m_PauseNo = 0;
						RandPausePoint(60, m_Setting.m_PauseNum, m_PauseTimeStart, m_PauseTimeEnd);
					}
				}
				//计算当前运动状态
				MoveTrace();
			}
			else
			{
				//保存数据
				SaveData();
				if (m_TrialNo >= m_TrialTimes - 1)
				{
					if ((m_TrialType == TRIAL_PRACTICE) && (m_Setting.m_ExperMode == 1))
					{
						//呈现正式测试选项
						m_TrialNo = -1;
						m_TrialType = TRIAL_EXPERMENT;
						m_TestState = STATE_DISPLAYOPTION;
						CleanupMem();
					}
					else
					{
						//测试结束
						QueryPerformanceCounter(&litmp);
						QPart1 = litmp.QuadPart;           // 获得初始值
						TimeInt = 2;
						m_TestState = STATE_OVER;
					}
				}
				else
				{
					//进行下一次测试
					CleanupMem();
					m_TestState = STATE_DISPLAYNEXT;
				}
			}
			break;
			//出现选项框
		case STATE_DISPLAYOPTION:
			break;
			//测试结束
		case STATE_OVER:
			/*		QueryPerformanceCounter(&litmp);
			QPart2 = litmp.QuadPart;         //获得中止值
			dfMinus = (double)(QPart2-QPart1);
			dfTim = dfMinus / dfFreq;        // 获得对应的时间值,单位为秒
			//2000ms
			if (dfTim >= TimeInt)
			{
			PostThreadMessage(dwInputThreadID, WM_THREADSTOP,0,0);
			m_TestState = STATE_EXIT;
			}*/
			break;
			//程序退出
		case STATE_EXIT:
			if (g_nThreadExitCount == 1)
			{

				SendMessage(hWnd, WM_CLOSE, 0, 0); // 关闭窗口
				SendMessage(hWnd, WM_DESTROY, 0, 0);
			}
			break;
		case STATE_NEXT:
			break;
		default:
			break;
		}
	}
Exemplo n.º 4
0
	//************************************************
	//*外部消息处理
	//************************************************
	LRESULT WINAPI t1::MsgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
	{
		switch (msg)
		{
		case WM_KEYUP:
			switch (wParam)
			{
				//退出键
			case VK_ESCAPE:
				// User wants to leave fullscreen mode
				//ShowCursor(TRUE);
				ShowCursor(TRUE);
				rtn = DialogBox(gHinstance, MAKEINTRESOURCE(IDD_PAUSE), hWnd, PauseMsgProc);
				ShowCursor(FALSE);

				//AllocConsole();
				//freopen("CONOUT$", "w", stdout);
				//printf("rtn的值为%d\n", rtn);
				//FreeConsole();
				switch (rtn)
				{
				case ID_CONTINUE:
					//TRACE("\n???\n");
					//重新设定时间间隔QPart1
					QueryPerformanceCounter(&litmp);
					QPart1 = litmp.QuadPart;
					QPart2 = QPart1;
					//激活父窗口
					SetForegroundWindow(hWnd);
					//ShowCursor(FALSE);
					rtn = 0;
					break;
				case ID_NEXT:
					//若在任务中途退出 则保存当前所有实验数据
					if (m_TestState == STATE_MOVINGOBJ)
						SaveData();
					EndDialog(hWnd, rtn);
					PostThreadMessage(dwInputThreadID, WM_THREADSTOP, 0, 0); 	//退出线程
					m_TestState = STATE_NEXT;
					break;
				case ID_CANCEL:
					//若在任务中途退出 则保存当前所有实验数据
					if (m_TestState == STATE_MOVINGOBJ)
						SaveData();
					EndDialog(hWnd, rtn);
					PostThreadMessage(dwInputThreadID, WM_THREADSTOP, 0, 0); 	//退出线程
					m_TestState = STATE_EXIT;
					//exit(0);
					break;
				}


			}
			return 0;
		case WM_KEYDOWN:
			switch (wParam)
			{

			}
			return 0;
			//程序结束消息
		case WM_DESTROY:
			CleanupMem();
			Cleanup();
			//PostQuitMessage( 0 );

			PostQuitMessage(rtn);
			m_bDisplayReady = FALSE;
			return 0;
		}

		return DefWindowProc(hWnd, msg, wParam, lParam);
	}