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

📄 qssreadbotdlg.cpp

📁 空调数据多线程采集
💻 CPP
📖 第 1 页 / 共 5 页
字号:
// QssReadBotDlg.cpp : implementation file
//

#include "stdafx.h"
#include "QssReadBot.h"
#include "QssReadBotDlg.h"

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

#include "ini.h"
#include "QssThread.h"

#define WM_MY_TRAY_NOTIFICATION WM_USER+1000


/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

// Dialog Data
	//{{AFX_DATA(CAboutDlg)
	enum { IDD = IDD_ABOUTBOX };
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CAboutDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	//{{AFX_MSG(CAboutDlg)
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
	//{{AFX_DATA_INIT(CAboutDlg)
	//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAboutDlg)
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
	//{{AFX_MSG_MAP(CAboutDlg)
		// No message handlers
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CQssReadBotDlg dialog


CQssReadBotDlg::CQssReadBotDlg(CWnd* pParent /*=NULL*/)
: CDialog(CQssReadBotDlg::IDD, pParent), m_trayIcon(IDR_TRAYICON)
{
	//{{AFX_DATA_INIT(CQssReadBotDlg)
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	// m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
	m_hIcon = AfxGetApp()->LoadIcon( IDI_BOY );			// 加载应用程序图标

	// 加载托盘图标设置
	m_bShowTrayNotifications = TRUE;
	m_bShutdown = FALSE;

}

void CQssReadBotDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CQssReadBotDlg)
	DDX_Control(pDX, IDC_COMBO7, m_ComBo7);
	DDX_Control(pDX, IDC_COMBO9, m_ComBo9);
	DDX_Control(pDX, IDC_COMBO8, m_ComBo8);
	DDX_Control(pDX, IDC_COMBO6, m_ComBo6);
	DDX_Control(pDX, IDC_COMBO5, m_ComBo5);
	DDX_Control(pDX, IDC_COMBO4, m_ComBo4);
	DDX_Control(pDX, IDC_COMBO3, m_ComBo3);
	DDX_Control(pDX, IDC_COMBO2, m_ComBo2);
	DDX_Control(pDX, IDC_COMBO10, m_ComBo10);
	DDX_Control(pDX, IDC_COMBO1, m_ComBo1);
	DDX_Control(pDX, IDC_CHECK9, m_Check9);
	DDX_Control(pDX, IDC_CHECK8, m_Check8);
	DDX_Control(pDX, IDC_CHECK7, m_Check7);
	DDX_Control(pDX, IDC_CHECK6, m_Check6);
	DDX_Control(pDX, IDC_CHECK5, m_Check5);
	DDX_Control(pDX, IDC_CHECK4, m_Check4);
	DDX_Control(pDX, IDC_CHECK3, m_Check3);
	DDX_Control(pDX, IDC_CHECK2, m_Check2);
	DDX_Control(pDX, IDC_CHECK10, m_Check10);
	DDX_Control(pDX, IDC_CHECK1, m_Check1);
	DDX_Control(pDX, IDC_CHECKALL, m_CheckAll);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CQssReadBotDlg, CDialog)
	//{{AFX_MSG_MAP(CQssReadBotDlg)
	ON_MESSAGE(WM_MY_TRAY_NOTIFICATION, OnTrayNotification)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_WM_CLOSE()
	ON_BN_CLICKED(IDC_SETQSS, OnSetqss)
	ON_BN_CLICKED(IDC_CHECKALL, OnCheckall)
	ON_BN_CLICKED(IDC_CANCELQSS, OnCancelqss)
	ON_BN_CLICKED(IDC_SETQSSSAVE, OnSetqsssave)
	ON_WM_CREATE()
	ON_COMMAND(ID_APP_OPEN, OnAppOpen)
	ON_COMMAND(ID_APP_SUSPEND, OnAppSuspend)
	ON_WM_SIZE()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CQssReadBotDlg message handlers

BOOL CQssReadBotDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Add "About..." menu item to system menu.

	// IDM_ABOUTBOX must be in the system command range.
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	// CenterWindow() ;				// 居中显示窗口
	// TODO: Add extra initialization here

///////////////////////////////////////////////////////////////////////////

	// 建立初始化文件
	int i = 0 ;
	CString strCom[10]  ;
	int strThread[10]  ;
	CIni ini ;
	LPCTSTR hFileName = "C:\\QSS.ini" ;
	ini.SetPathName( hFileName ) ;

	HANDLE hFile = CreateFile( hFileName, GENERIC_READ|GENERIC_WRITE, 0,0, OPEN_ALWAYS ,0, NULL) ;
	if ( hFile == INVALID_HANDLE_VALUE ) 
	{
		AfxMessageBox( "生成 QSS 初始化文件失败!" ) ;
	}
	else
	{
		if ( CloseHandle( hFile ) == 0 )
			return FALSE;
		if ( ERROR_ALREADY_EXISTS == GetLastError() )
		{
			// 取得通讯端口
			strCom[0] = ini.GetString( "QSS", "QSS1", _T("(null)") ) ;
			strCom[1] = ini.GetString( "QSS", "QSS2", _T("(null)") ) ; 
			strCom[2] = ini.GetString( "QSS", "QSS3", _T("(null)") ) ; 
			strCom[3] = ini.GetString( "QSS", "QSS4", _T("(null)") ) ; 
			strCom[4] = ini.GetString( "QSS", "QSS5", _T("(null)")) ; 
			strCom[5] = ini.GetString( "QSS", "QSS6", _T("(null)")) ; 
			strCom[6] = ini.GetString( "QSS", "QSS7", _T("(null)")) ; 
			strCom[7] = ini.GetString( "QSS", "QSS8", _T("(null)")) ; 
			strCom[8] = ini.GetString( "QSS", "QSS9", _T("(null)")) ; 
			strCom[9] = ini.GetString( "QSS", "QSS10", _T("(null)") ) ; 

			// 取得线程开关
			strThread[0] = ini.GetInt( "THREAD", "THREAD1", 0 ,  BASE_DECIMAL ) ;
			strThread[1] = ini.GetInt( "THREAD", "THREAD2", 0 ,  BASE_DECIMAL ) ;
			strThread[2] = ini.GetInt( "THREAD", "THREAD3", 0 ,  BASE_DECIMAL ) ;
			strThread[3] = ini.GetInt( "THREAD", "THREAD4", 0 ,  BASE_DECIMAL ) ;
			strThread[4] = ini.GetInt( "THREAD", "THREAD5", 0 ,  BASE_DECIMAL ) ;
			strThread[5] = ini.GetInt( "THREAD", "THREAD6", 0 ,  BASE_DECIMAL ) ;
			strThread[6] = ini.GetInt( "THREAD", "THREAD7", 0 ,  BASE_DECIMAL ) ;
			strThread[7] = ini.GetInt( "THREAD", "THREAD8", 0 ,  BASE_DECIMAL ) ;
			strThread[8] = ini.GetInt( "THREAD", "THREAD9", 0 ,  BASE_DECIMAL ) ;
			strThread[9] = ini.GetInt( "THREAD", "THREAD10", 0 ,  BASE_DECIMAL ) ;

			// 取得数据库连接字符串
			strServerName   = ini.GetString( "DATABASE", "Server",   _T("(null)") ) ;
			strDatabaseName = ini.GetString( "DATABASE", "DATABASE", _T("(null)") ) ; 
			strUserID       = ini.GetString( "DATABASE", "UID", _T("(null)") ) ; 
			strUserPassword = ini.GetString( "DATABASE", "PWD", _T("(null)") ) ; 

			// 取得定时器值
			uTimerElapse = 60000 ;
			uTimerElapse = ini.GetInt( "TIMER", "ThreadTimer", 0 ,  BASE_DECIMAL ) ;
		}
		else
		{

			// 0 不启动线程  1 启动线程
			ini.WriteInt( "THREAD", "THREAD1", 0, BASE_DECIMAL ) ; 
			ini.WriteInt( "THREAD", "THREAD2", 0 , BASE_DECIMAL ) ; 
			ini.WriteInt( "THREAD", "THREAD3", 0 , BASE_DECIMAL) ; 
			ini.WriteInt( "THREAD", "THREAD4", 0 , BASE_DECIMAL) ; 
			ini.WriteInt( "THREAD", "THREAD5", 0 , BASE_DECIMAL) ; 
			ini.WriteInt( "THREAD", "THREAD6", 0 , BASE_DECIMAL ) ; 
			ini.WriteInt( "THREAD", "THREAD7", 0 , BASE_DECIMAL ) ; 
			ini.WriteInt( "THREAD", "THREAD8", 0 , BASE_DECIMAL) ; 
			ini.WriteInt( "THREAD", "THREAD9", 0 , BASE_DECIMAL) ; 
			ini.WriteInt( "THREAD", "THREAD10", 0, BASE_DECIMAL ) ; 


			strThread[0] = 0 ;
			strThread[1] = 0 ;
			strThread[2] = 0 ;
			strThread[3] = 0 ;
			strThread[4] = 0 ;
			strThread[5] = 0 ;
			strThread[6] = 0 ;
			strThread[7] = 0 ;
			strThread[8] = 0 ;
			strThread[9] = 0 ;

			ini.WriteString( "QSS", "QSS1", "com1" ) ; 
			ini.WriteString( "QSS", "QSS2", "com2" ) ; 
			ini.WriteString( "QSS", "QSS3", "com3" ) ; 
			ini.WriteString( "QSS", "QSS4", "com4" ) ; 
			ini.WriteString( "QSS", "QSS5", "com5" ) ; 
			ini.WriteString( "QSS", "QSS6", "com1" ) ; 
			ini.WriteString( "QSS", "QSS7", "com2" ) ; 
			ini.WriteString( "QSS", "QSS8", "com3" ) ; 
			ini.WriteString( "QSS", "QSS9", "com4" ) ; 
			ini.WriteString( "QSS", "QSS10", "com5" ) ; 

			strCom[0] = "com1" ;
			strCom[1] = "com2" ;
			strCom[2] = "com3" ;
			strCom[3] = "com4" ;
			strCom[4] = "com5" ;
			strCom[5] = "com1" ;
			strCom[6] = "com2" ;
			strCom[7] = "com3" ;
			strCom[8] = "com4" ;
			strCom[9] = "com5" ;


			ini.WriteString( "DATABASE", "Server", "127.0.0.1" ) ; 
			ini.WriteString( "DATABASE", "DATABASE", "cenaircon" ) ; 
			ini.WriteString( "DATABASE", "UID", "sa" ) ; 
			ini.WriteString( "DATABASE", "PWD", "sql" ) ; 

			strServerName   = "127.0.0.1" ;
			strDatabaseName = "cenaircon" ; 
			strUserID       = "sa" ; 
			strUserPassword = "sql" ; 

			uTimerElapse = 60000 ;
			ini.WriteInt( "TIMER", "ThreadTimer", uTimerElapse, BASE_DECIMAL ) ; 

		}

		// 设置通讯端口与QSS编号对应
		for ( i = 0 ; i < 10 ; i++ ) 
		{
			strQSS[i] = strCom[i] ;
		}
		// 写入从 INI 文件 读取的设置值
		if ( strCom[0].GetLength() == 4 )
			strCom[0] = strCom[0].Mid( 3,1 ) ;
		else
			strCom[0] = strCom[0].Mid( 3,2 ) ;
		i = atoi( strCom[0] ) ;
		m_ComBo1.SetCurSel( i - 1 ) ;

		if ( strCom[0].GetLength() == 4 )
			strCom[1] = strCom[1].Mid( 3,1 ) ;
		else
			strCom[1] = strCom[1].Mid( 3,2 ) ;
		i = atoi( strCom[1] ) ;
		m_ComBo2.SetCurSel( i - 1 ) ;

		if ( strCom[0].GetLength() == 4 )
			strCom[2] = strCom[2].Mid( 3,1 ) ;
		else
			strCom[2] = strCom[2].Mid( 3,2 ) ;
		i = atoi( strCom[2] ) ;
		m_ComBo3.SetCurSel( i - 1 ) ;

		if ( strCom[0].GetLength() == 4 )
			strCom[3] = strCom[3].Mid( 3,1 ) ;
		else
			strCom[3] = strCom[3].Mid( 3,2 ) ;
		i = atoi( strCom[3] ) ;
		m_ComBo4.SetCurSel( i - 1 ) ;

		if ( strCom[0].GetLength() == 4 )
			strCom[4] = strCom[4].Mid( 3,1 ) ;
		else
			strCom[4] = strCom[4].Mid( 3,2 ) ;
		i = atoi( strCom[4] ) ;
		m_ComBo5.SetCurSel( i - 1 ) ;

		if ( strCom[0].GetLength() == 4 )
			strCom[5] = strCom[5].Mid( 3,1 ) ;
		else
			strCom[5] = strCom[5].Mid( 3,2 ) ;
		i = atoi( strCom[5] ) ;
		m_ComBo6.SetCurSel( i - 1 ) ;

		if ( strCom[0].GetLength() == 4 )
			strCom[6] = strCom[6].Mid( 3,1 ) ;
		else
			strCom[6] = strCom[6].Mid( 3,2 ) ;
		i = atoi( strCom[6] ) ;
		m_ComBo7.SetCurSel( i - 1 ) ;

		if ( strCom[0].GetLength() == 4 )
			strCom[7] = strCom[7].Mid( 3,1 ) ;
		else
			strCom[7] = strCom[7].Mid( 3,2 ) ;
		i = atoi( strCom[7] ) ;
		m_ComBo8.SetCurSel( i - 1 ) ;

		if ( strCom[0].GetLength() == 4 )
			strCom[8] = strCom[8].Mid( 3,1 ) ;
		else
			strCom[8] = strCom[8].Mid( 3,2 ) ;
		i = atoi( strCom[8] ) ;
		m_ComBo9.SetCurSel( i - 1 ) ;

		if ( strCom[0].GetLength() == 4 )
			strCom[9] = strCom[9].Mid( 3,1 ) ;
		else
			strCom[9] = strCom[9].Mid( 3,2 ) ;
		i = atoi( strCom[9] ) ;
		m_ComBo10.SetCurSel( i - 1 ) ;

		// 设置线程启动检查框
		m_Check1.SetCheck( strThread[0] ) ;
		m_Check2.SetCheck( strThread[1] ) ;
		m_Check3.SetCheck( strThread[2] ) ;
		m_Check4.SetCheck( strThread[3] ) ;
		m_Check5.SetCheck( strThread[4] ) ;
		m_Check6.SetCheck( strThread[5] ) ;
		m_Check7.SetCheck( strThread[6] ) ;
		m_Check8.SetCheck( strThread[7] ) ;
		m_Check9.SetCheck( strThread[8] ) ;
		m_Check10.SetCheck( strThread[9] ) ;

	}


///////////////////////////////////////////////////////////////////////////

	// 设置定时器延时时间
	//uTimerElapse = 60000 ;
	// 初始化临界区对象
	InitializeCriticalSection( &criticalSection ) ;		

	// 初始化线程: 设置 10 个线程,并启动
	dwThreadID1  = 0 ;
	dwThreadID2  = 0 ;
	dwThreadID3  = 0 ;
	dwThreadID4  = 0 ;
	dwThreadID5  = 0 ;
	dwThreadID6  = 0 ;
	dwThreadID7  = 0 ;
	dwThreadID8  = 0 ;
	dwThreadID9  = 0 ;
	dwThreadID10  = 0 ;

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

	HANDLE hHandleQSS1  = NULL ;
	HANDLE hHandleQSS2  = NULL ;
	HANDLE hHandleQSS3  = NULL ;
	HANDLE hHandleQSS4  = NULL ;
	HANDLE hHandleQSS5  = NULL ;
	HANDLE hHandleQSS6  = NULL ;
	HANDLE hHandleQSS7  = NULL ;
	HANDLE hHandleQSS8  = NULL ;
	HANDLE hHandleQSS9  = NULL ;
	HANDLE hHandleQSS10 = NULL ;

	// 1-5
	if ( strThread[0] == 1 )
	{
		hHandleQSS1  = CreateThread( NULL, 1024, ( LPTHREAD_START_ROUTINE )Thread1,  NULL, 0 , &dwThreadID1) ;
		if ( NULL != hHandleQSS1 ) 
			SetDlgItemText( IDC_STATUS_DISPLAY1, "读取QSS 1 的线程一已运行" ) ;
	}

	if ( strThread[1] == 1 )
	{
		hHandleQSS2  = CreateThread( NULL, 1024, ( LPTHREAD_START_ROUTINE )Thread2,  NULL, 0 , &dwThreadID2) ;
		if ( NULL != hHandleQSS2 ) 
			SetDlgItemText( IDC_STATUS_DISPLAY2, "读取QSS 2 的线程二已运行" ) ;
	}

	if ( strThread[2] == 1 )
	{
		hHandleQSS3  = CreateThread( NULL, 1024, ( LPTHREAD_START_ROUTINE )Thread3,  NULL, 0 , &dwThreadID3) ;
		if ( NULL != hHandleQSS3 ) 
			SetDlgItemText( IDC_STATUS_DISPLAY3, "读取QSS 3 的线程三已运行" ) ;
	}

	if ( strThread[3] == 1 )
	{
		hHandleQSS4  = CreateThread( NULL, 1024, ( LPTHREAD_START_ROUTINE )Thread4,  NULL, 0 , &dwThreadID4) ;
		if ( NULL != hHandleQSS4 ) 	
			SetDlgItemText( IDC_STATUS_DISPLAY4, "读取QSS 4 的线程四已运行" ) ;
	}

	if ( strThread[4] == 1 )
	{
		hHandleQSS5  = CreateThread( NULL, 1024, ( LPTHREAD_START_ROUTINE )Thread5,  NULL, 0 , &dwThreadID5) ;
		if ( NULL != hHandleQSS5 )
			SetDlgItemText( IDC_STATUS_DISPLAY5, "读取QSS 5 的线程五已运行" ) ;
	}
	
	// 6-10
	if ( strThread[5] == 1 )
	{
		hHandleQSS6  = CreateThread( NULL, 1024, ( LPTHREAD_START_ROUTINE )Thread6,  NULL, 0 , &dwThreadID6) ;
		if ( NULL != hHandleQSS6 ) 
			SetDlgItemText( IDC_STATUS_DISPLAY6, "读取QSS 6 的线程六已运行" ) ;
	}

	if ( strThread[6] == 1 )
	{
		hHandleQSS7  = CreateThread( NULL, 1024, ( LPTHREAD_START_ROUTINE )Thread7,  NULL, 0 , &dwThreadID7) ;
		if ( NULL != hHandleQSS7 ) 	
			SetDlgItemText( IDC_STATUS_DISPLAY7, "读取QSS 7 的线程七已运行" ) ;
	}

	if ( strThread[7] == 1 )
	{
		hHandleQSS8  = CreateThread( NULL, 1024, ( LPTHREAD_START_ROUTINE )Thread8,  NULL, 0 , &dwThreadID8) ;
		if ( NULL != hHandleQSS8 ) 	
			SetDlgItemText( IDC_STATUS_DISPLAY8, "读取QSS 8 的线程八已运行" ) ;
	}

	if ( strThread[8] == 1 )
	{
		hHandleQSS9  = CreateThread( NULL, 1024, ( LPTHREAD_START_ROUTINE )Thread9,  NULL, 0 , &dwThreadID9) ;
		if ( NULL != hHandleQSS9 ) 
			SetDlgItemText( IDC_STATUS_DISPLAY9, "读取QSS 9 的线程九已运行" ) ;
	}

	if ( strThread[9] == 1 )
	{
		hHandleQSS10 = CreateThread( NULL, 1024, ( LPTHREAD_START_ROUTINE )Thread10, NULL, 0 , &dwThreadID10) ;
		if ( NULL != hHandleQSS10 ) 
			SetDlgItemText( IDC_STATUS_DISPLAY10, "读取QSS 10 的线程十已运行" ) ;
	}

	// 连接数据库

	CString strDBConnection ;
	HRESULT hr ;
	//hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
	// PROVIDER = SQLOLEDB
	//strDBConnection  = "PROVIDER = SQLOLEDB;Server=" + strServerName + ";DATABASE=" ;
	
	strDBConnection  = "driver={SQL Server};Server=" + strServerName + ";DATABASE=" ;

⌨️ 快捷键说明

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