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

📄 qssreader.cpp

📁 QSS设备读取的后台服务程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	dwThreadID7  = 0 ;
	dwThreadID8  = 0 ;
	dwThreadID9  = 0 ;
	dwThreadID10  = 0 ;

	SECURITY_ATTRIBUTES securityAttributes ;
	ZeroMemory( &securityAttributes, sizeof(SECURITY_ATTRIBUTES)) ;
	securityAttributes.nLength = sizeof(SECURITY_ATTRIBUTES) ;

	HANDLE hHandleQSS1  = CreateThread( NULL, 0, ( LPTHREAD_START_ROUTINE )Thread1, 0, 0 , &dwThreadID1) ;
	HANDLE hHandleQSS2  = CreateThread( NULL, 0, ( LPTHREAD_START_ROUTINE )Thread2, 0, 0 , &dwThreadID2) ;
/*	HANDLE hHandleQSS3  = CreateThread( NULL, 0, ( LPTHREAD_START_ROUTINE )Thread3, 0, 0 , &dwThreadID3) ;
	HANDLE hHandleQSS4  = CreateThread( NULL, 0, ( LPTHREAD_START_ROUTINE )Thread4, 0, 0 , &dwThreadID4) ;
	HANDLE hHandleQSS5  = CreateThread( NULL, 0, ( LPTHREAD_START_ROUTINE )Thread5, 0, 0 , &dwThreadID5) ;
	HANDLE hHandleQSS6  = CreateThread( NULL, 0, ( LPTHREAD_START_ROUTINE )Thread6, 0, 0 , &dwThreadID6) ;
	HANDLE hHandleQSS7  = CreateThread( NULL, 0, ( LPTHREAD_START_ROUTINE )Thread7, 0, 0 , &dwThreadID7) ;
	HANDLE hHandleQSS8  = CreateThread( NULL, 0, ( LPTHREAD_START_ROUTINE )Thread8, 0, 0 , &dwThreadID8) ;
	HANDLE hHandleQSS9  = CreateThread( NULL, 0, ( LPTHREAD_START_ROUTINE )Thread9, 0, 0 , &dwThreadID9) ;
	HANDLE hHandleQSS10 = CreateThread( NULL, 0, ( LPTHREAD_START_ROUTINE )Thread10, 0, 0 , &dwThreadID10) ;
*/

	//====================================================


	//_Module.m_hInst ;

	uPtrRet = SetTimer( NULL, ID_TIMER, 60000, TIMERPROC(OnTimerProc) ) ;

    MSG msg;
    while (GetMessage(&msg, 0, 0, 0))
        DispatchMessage(&msg);


    _Module.RevokeClassObjects();
	//KillTimer( NULL, uPtrRet );

    CoUninitialize();
}

/////////////////////////////////////////////////////////////////////////////
//
extern "C" int WINAPI _tWinMain(HINSTANCE hInstance, 
    HINSTANCE /*hPrevInstance*/, LPTSTR lpCmdLine, int /*nShowCmd*/)
{
    lpCmdLine = GetCommandLine(); //this line necessary for _ATL_MIN_CRT
    _Module.Init(ObjectMap, hInstance, IDS_SERVICENAME, &LIBID_QSSREADERLib);
    _Module.m_bService = TRUE;

    TCHAR szTokens[] = _T("-/");

    LPCTSTR lpszToken = FindOneOf(lpCmdLine, szTokens);
    while (lpszToken != NULL)
    {
        if (lstrcmpi(lpszToken, _T("UnregServer"))==0)
            return _Module.UnregisterServer();

        // Register as Local Server
        if (lstrcmpi(lpszToken, _T("RegServer"))==0)
            return _Module.RegisterServer(TRUE, FALSE);
        
        // Register as Service
        if (lstrcmpi(lpszToken, _T("Service"))==0)
            return _Module.RegisterServer(TRUE, TRUE);
        
        lpszToken = FindOneOf(lpszToken, szTokens);
    }

    // Are we Service or Local Server
    CRegKey keyAppID;
    LONG lRes = keyAppID.Open(HKEY_CLASSES_ROOT, _T("AppID"), KEY_READ);
    if (lRes != ERROR_SUCCESS)
        return lRes;

    CRegKey key;
    lRes = key.Open(keyAppID, _T("{9CA56CBE-F9B5-433C-B7A0-9D8A0CA9747C}"), KEY_READ);
    if (lRes != ERROR_SUCCESS)
        return lRes;

    TCHAR szValue[_MAX_PATH];
    DWORD dwLen = _MAX_PATH;
    lRes = key.QueryValue(szValue, _T("LocalService"), &dwLen);

    _Module.m_bService = FALSE;
    if (lRes == ERROR_SUCCESS)
        _Module.m_bService = TRUE;

    _Module.Start();

    // When we get here, the service has been stopped
    return _Module.m_status.dwWin32ExitCode;
}

/****************************************************************************/
//																			//
//	线程函数和线程管理函数													//
//																			//
//	时间:2005-01-18		作者:Jason										//
//																			//
//																			//
/****************************************************************************/

LRESULT CALLBACK Thread1( void ) 
{
	HWND hWnd ;
	MSG Msg ;
	WNDCLASS wndClass ;

	char lpszClassName[] = "Thread1" ;
	char lpszTitle[] = "Thread1" ;

	HINSTANCE hInstance = NULL ;

	
	hInstance = _Module.m_hInst ;

	// 窗口类定义
	wndClass.cbClsExtra  = 0;
	wndClass.cbWndExtra  = 0;
	wndClass.hbrBackground = (HBRUSH)GetStockObject( GRAY_BRUSH ); 
	wndClass.hCursor = LoadCursor( NULL, IDC_ARROW );
	wndClass.hIcon   = LoadIcon( NULL, IDI_APPLICATION );
	wndClass.hInstance   = hInstance;
	wndClass.lpfnWndProc = (WNDPROC)OnThreadProc1;
	wndClass.lpszClassName = lpszClassName ;
	wndClass.lpszMenuName  = NULL;
	wndClass.style = 0 ;    

	if ( !RegisterClass( &wndClass ))
	{
		MessageBeep(0) ;
		return false ;
	}

	hWnd = CreateWindow( lpszClassName, lpszTitle, WS_OVERLAPPEDWINDOW, 300,0,200,150,NULL,NULL, hInstance, NULL ) ;

	hWnd1 = hWnd ;

	//ShowWindow( hWnd, SW_SHOW ) ;
	//UpdateWindow( hWnd ) ;
	
	//SetTimer( hWnd, ID_TIMER1, 10000, TIMERPROC(OnTimerProc1) ) ;
	//UINT_PTR uPtrRet = SetTimer( hWnd, ID_TIMER1, 10000, TIMERPROC(OnTimerProc) ) ;

	while( GetMessage( &Msg, NULL, 0, 0 ) ) ;
	{
		TranslateMessage( &Msg ) ;
		DispatchMessage( &Msg ) ;

	}

	return Msg.wParam ;

}

//===============================================================

LRESULT CALLBACK Thread2( void ) 
{
	HWND hWnd ;
	MSG Msg ;
	WNDCLASS wndClass ;

	char lpszClassName[] = "Thread2" ;
	char lpszTitle[] = "Thread2" ;

	HINSTANCE hInstance = NULL ;

	hInstance = _Module.m_hInst ;

	// 窗口类定义
	wndClass.cbClsExtra  = 0;
	wndClass.cbWndExtra  = 0;
	wndClass.hbrBackground = (HBRUSH)GetStockObject( GRAY_BRUSH ); 
	wndClass.hCursor = LoadCursor( NULL, IDC_ARROW );
	wndClass.hIcon   = LoadIcon( NULL, IDI_APPLICATION );
	wndClass.hInstance   = hInstance;
	wndClass.lpfnWndProc = (WNDPROC)OnThreadProc2;
	wndClass.lpszClassName = lpszClassName ;
	wndClass.lpszMenuName  = NULL;
	wndClass.style = 0 ;    


	if ( !RegisterClass( &wndClass ))
	{
		MessageBeep(0) ;
		return false ;
	}

	hWnd = CreateWindow( lpszClassName, lpszTitle, WS_OVERLAPPEDWINDOW, 300,0,200,150,NULL,NULL, hInstance, NULL ) ;

	hWnd2 = hWnd ;

	//ShowWindow( hWnd, SW_SHOW ) ;
	//UpdateWindow( hWnd ) ;
	
	//SetTimer( hWnd, ID_TIMER1, 10000, TIMERPROC(OnTimerProc1) ) ;
	//UINT_PTR uPtrRet = SetTimer( hWnd, ID_TIMER2, 10000, TIMERPROC(OnThreadProc1) ) ;

	while( GetMessage( &Msg, NULL, 0, 0 ) ) ;
	{
		TranslateMessage( &Msg ) ;
		DispatchMessage( &Msg ) ;

	}

	return Msg.wParam ;

}


//================================================================================
// 
// 线程处理函数 1 处理 QSS 1 连接的数据
// 

LRESULT WINAPI OnThreadProc1( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam ) 
{

	DWORD dwRet = -1 ;
	hWnd1 = hWnd ;

	switch( message )
	{
		case WM_CREATE:
			MessageBox( NULL, "WM_CREATE","",MB_OK) ;
			break ;
		case WM_TIMER:
			MessageBox( NULL, "WM_TIMER","",MB_OK) ;
			
			dwRet = QSSReadWrite( 1 ) ;

			break ;
		case WM_THREAD1:

			MessageBox( NULL, "WM_THREAD1","",MB_OK) ;
			dwRet = QSSReadWrite( 1 ) ;
			break ;
		case WM_THREAD2:

			MessageBox( NULL, "WM_THREAD2","",MB_OK) ;
			break ;
		case WM_DESTROY:
			// 
			//SendMessage( NULL, 
			KillTimer( hWnd, ID_TIMER1) ;
			PostQuitMessage( 0 ) ;
			break ;

		default:
			return DefWindowProc( hWnd, message, wParam, lParam ) ;
	}

	return 0 ;

}

//================================================================================
// 
// 线程处理函数 2 处理 QSS 2 连接的数据
//
// ODBC 连接数据库

LRESULT WINAPI OnThreadProc2( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam ) 
{

	DWORD dwRet = -1 ;
	hWnd2 = hWnd ;

	switch( message )
	{
		case WM_CREATE:
			MessageBox( NULL, "WM_CREATE","",MB_OK) ;
			break ;
		case WM_TIMER:
			MessageBox( NULL, "WM_TIMER","",MB_OK) ;
			
			dwRet = QSSReadWrite( 2 ) ;
			break ;
		case WM_THREAD1:

			MessageBox( NULL, "WM_THREAD1","",MB_OK) ;
			break ;
		case WM_THREAD2:
		
			MessageBox( NULL, "WM_THREAD2","",MB_OK) ;
			break ;
		case WM_DESTROY:
			// 
			//SendMessage( NULL, 
			KillTimer( hWnd, ID_TIMER1) ;
			PostQuitMessage( 0 ) ;
			break ;

		default:
			return DefWindowProc( hWnd, message, wParam, lParam ) ;
	}

	return 0 ;



}


VOID CALLBACK OnTimerProc(HWND hWnd,UINT uMsg,UINT_PTR idEvent,DWORD dwTime)
{
	SendMessage( hWnd1, WM_THREAD1, 0, 0 ) ;
	SendMessage( hWnd2, WM_THREAD2, 0, 0 ) ;

}


DWORD QSSReadWrite( __int32 n32QssNumber )
{
/*
	// 动态链接库名称 ( PMBHair.dll )

	int nRet = -1 ;
	AirCondState struAirCondState ;
	ZeroMemory( &struAirCondState, sizeof(AirCondState)) ;

	// 打开串口资源
	HANDLE hCom = NULL ;
	
	// 装载动态链接库
	HMODULE hAirCModule = LoadLibrary( "PMBHair.dll" ) ;
	if ( FAILED(hAirCModule) )
		return -11 ;
	else
	{

		
		GetOpenDevice   getOpenDevice   ;
		GetAirCondState getAirCondState ;
		
		// 得到动态链接库中的函数的地址指针
		getOpenDevice   = ( GetOpenDevice )GetProcAddress( hAirCModule , "OpenDevice" ) ;
		getAirCondState = ( GetAirCondState )GetProcAddress( hAirCModule , "GetIndoorStatus" ) ;
		
		// 打开串口句柄

		hCom = getOpenDevice( "com1") ;

		long lgret = GetLastError() ;

		// 调用函数取得( QSS )空调运行数据, 共 48 个内机 

		for ( int i = 0 ; i < 48 ; i ++ ) 
		{
			nRet = getAirCondState( hCom, i , &struAirCondState ) ;

			// 如果取出成功,保存数据到SQL SERVER 2000 数据库中
		}


	}

	// 释放动态链接库
	FreeLibrary( hAirCModule ) ;

	// 关闭并释放串口句柄
	CloseHandle( hCom ) ;

	//ExitThread( 0 ) ;

*/

	CDatabase dbConn ;

	CRecordset dbSet ;
	
	CString strConn ;
	CString strSql  ;
	CString strID, strBh, strName ;
	int nBh ;
	//int nID  ;

	strID = "1" ;
	strName = "Jason" ;
	nBh = n32QssNumber ;
	char tBh[20], tID[20] ;
	
	itoa( nBh, tBh, 10 ) ;

	strBh = tBh ;

	while( 1 )
	{
		//dbConn.OpenEx( "DSN = AirCondition ; UID = sa ; PWD = sql", CDatabase::openReadOnly | CDatabase::noOdbcDialog ) ;
		dbConn.Open( "AirCondition", FALSE, FALSE, "ODBC;UID = sa;PWD = topdigi", TRUE ) ;
		
		strConn = dbConn.GetConnect() ;

		int i ;
	//	strSql = "Select max(AirConSwitch_ID) into "+ strID + " from t_test1 " ;

	//	dbConn.ExecuteSQL( strSql ) ;

	//	i = atoi( strID ) ;

		// 设置流水号
		nBh = atoi( strID ) ;

		for( i = 0 ; i < 30 ; i ++ )
		{
			nBh++ ;

			itoa( nBh, tID, 10 ) ;

			strID = tID ;

			//strSql = "Select * from t_test" ;
			//int i = 101 ;
			strSql = "Insert into t_test1(AirConSwitch_ID ,Equipment_ID, Run_Flag ) values( '" + strID + "' , '"+ strName + "' , '1' )" ;


			dbConn.ExecuteSQL( strSql ) ;

		}

		//Sleep( 10000 ) ;

	}

	dbConn.Close() ;

	return 1 ;



}

⌨️ 快捷键说明

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