?? qssreader.cpp
字號:
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 + -