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

📄 datawritetread.cpp

📁 用算法来实现一个收费系统
💻 CPP
字号:
// DatawriteTread.cpp : implementation file
//

#include "stdafx.h"
#include "lanesoft.h"
#include "mainfrm.h"
#include "netcomthread.h"
#include "DatawriteTread.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
extern CMainFrame * m_pMainFrame;
extern 	char pMsg1[2000];

extern BOOL m_BClose ;
extern BOOL g_mmb ;
extern BOOL g_mmbd ;
extern BOOL g_feb ;
extern BOOL g_febd ;
/////////////////////////////////////////////////////////////////////////////
// CDatawriteTread

IMPLEMENT_DYNCREATE(CDatawriteTread, CWinThread)

CDatawriteTread::CDatawriteTread()
{
	m_pDataUseList = new CPtrList;
	m_pDataBase = new CDatabase;
//	m_pDataBase->OpenEx("DSN=TempData1;UID=sa;PWD=",CDatabase::useCursorLib|CDatabase::noOdbcDialog);
	m_pDataBase->Open(_T("hm"),FALSE,FALSE,"ODBC;UID=sa;PWD=;",CDatabase::useCursorLib|CDatabase::noOdbcDialog);
	
	m_pMainData = new CMainData(m_pDataBase);
	if(!m_pMainData->IsOpen())
		m_pMainData->Open();
	while(!m_pMainData->IsEOF())
			m_pMainData->MoveNext();

	m_pMainData1 = new CMainData(m_pDataBase);
	if(!m_pMainData1->IsOpen())
		m_pMainData1->Open();
	while(!m_pMainData1->IsEOF())
			m_pMainData1->MoveNext();

	m_pNameData = new CNameTable(m_pDataBase) ;
	if (!m_pNameData->IsOpen())
		m_pNameData->Open() ;
	m_pFeeData = new CFeeTable(m_pDataBase) ;
	if (!m_pFeeData->IsOpen())
		m_pFeeData->Open() ;
		
}

CDatawriteTread::~CDatawriteTread()
{
	while (RemoveData());
	delete m_pDataUseList;
	if (m_pFeeData->IsOpen())
		m_pFeeData->Close() ;
	if (m_pNameData->IsOpen())
		m_pNameData->Close() ;
	if(m_pMainData->IsOpen())
		m_pMainData->Close();
	if(m_pMainData1->IsOpen())
		m_pMainData1->Close();
	if(m_pDataBase->IsOpen())
		m_pDataBase->Close();
	delete m_pFeeData ;
	delete m_pNameData ;
	delete m_pMainData;
	delete m_pDataBase;

}

BOOL CDatawriteTread::InitInstance()
{
	// TODO:  perform and per-thread initialization here
	return TRUE;
}

int CDatawriteTread::ExitInstance()
{
	// TODO:  perform any per-thread cleanup here
	return CWinThread::ExitInstance();
}

BEGIN_MESSAGE_MAP(CDatawriteTread, CWinThread)
	//{{AFX_MSG_MAP(CDatawriteTread)
		// NOTE - the ClassWizard will add and remove mapping macros here.
		ON_THREAD_MESSAGE(WM_TIMER_CLK,OnTimerClock)
		ON_THREAD_MESSAGE(WM_KEY_PRESS,OnKeyPress)
		ON_THREAD_MESSAGE(WM_KEY_PRESS1,OnKeyPress1)
		ON_THREAD_MESSAGE(WM_HAVE_RESPOND,OnRespond)
		ON_THREAD_MESSAGE(WM_KEY_NAME,OnKeyName)
		ON_THREAD_MESSAGE(WM_KEY_NAME_DEL,OnKeyNameDel)
		ON_THREAD_MESSAGE(WM_KEY_FEE,OnKeyFee)
		ON_THREAD_MESSAGE(WM_KEY_FEE_DEL,OnKeyFeeDel)

	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDatawriteTread message handlers

void CDatawriteTread::AddData(Data_Use *pDataUse)
{
	DataTemp *pDataTemp = new DataTemp;
	Data_Use *cpDataUse = new Data_Use;
	memcpy(cpDataUse,pDataUse,sizeof(Data_Use));
	pDataTemp->pDataUse = cpDataUse;
	pDataTemp->ntimer = 5;
	m_pDataUseList->AddTail(pDataTemp);

}
BOOL CDatawriteTread::RemoveData()
{
	if(m_pDataUseList->IsEmpty())
		return false;
	DataTemp *cpDataTemp = (DataTemp *)m_pDataUseList->RemoveHead();
	delete cpDataTemp->pDataUse;
	delete cpDataTemp;
	return true;

}

BOOL CDatawriteTread::RemoveData(CDatawriteTread::DataTemp *pDataTemp)
{
	if(m_pDataUseList->IsEmpty())
		return false;
	DataTemp *cpDataTemp = (DataTemp *)m_pDataUseList->RemoveHead();
	memcpy(pDataTemp->pDataUse,cpDataTemp->pDataUse,sizeof(Data_Use));
	pDataTemp->ntimer = cpDataTemp->ntimer;
	delete cpDataTemp->pDataUse;
	delete cpDataTemp;
	return true;
}
LONG CDatawriteTread::OnTimerClock(UINT wParam,LONG lParam)
{
	static int Timecount = 0;
	BOOL need_write = false;

/*	POSITION pos = m_pDataUseList ->GetHeadPosition();//获得列表中头元素的位置
	while(pos != NULL)//即列有不为空
	{
		DataTemp *pDataTemp = (DataTemp *)m_pDataUseList->GetNext(pos);//指针下移,返回指针所指的元素
		if((pDataTemp->ntimer--)<=0)
		{
			need_write = true;
			break;
		}
	}
	if(need_write)
	{
		POSITION pos = m_pDataUseList ->GetHeadPosition();
		while(pos != NULL)
		{
			DataTemp *pDataTemp = (DataTemp *)m_pDataUseList->GetNext(pos);
		}
		m_pDataUseList->RemoveAll();//删除列表中所有元素,并释放与CObList相关联的内存
	}
*/
  if(Timecount++ >=1)//3秒一次
	{
		Timecount = 0;
		if(m_pDataUseList->GetCount() > 0)//获得列表中元素个数
		{	
			DataTemp *pDataTemp = (DataTemp *)m_pDataUseList->GetHead();
			Data_Use *pDataUse = pDataTemp->pDataUse;
			m_pMainFrame->m_pNetManger->PostThreadMessage(WM_KEY_USE,0,(LONG)pDataUse);
		}
		else
		{	
			m_pMainData->m_strFilter.Format("BACKUP1=%d",0);//hm
				m_pMainData->Requery();//hm
			if(!m_pMainData->IsEOF())
			{
				Data_Use DDataUse;

				m_pMainData->ReadOut(&DDataUse);
				AddData(&DDataUse);//wangyu
			}
		}
	}
	return 0;
}
LONG CDatawriteTread::OnKeyPress1(UINT wParam,LONG lParam)
{
	Data_Use *pDataUse = (Data_Use *)lParam;
	m_pMainData1->WriteIn((Data_Use *)lParam);
	return 0;
}

LONG CDatawriteTread::OnKeyPress(UINT wParam,LONG lParam)
{
	Data_Use *pDataUse = (Data_Use *)lParam;
	m_pMainData->WriteIn((Data_Use *)lParam);
	return 0;
}

LONG CDatawriteTread::OnKeyName(UINT wParam,LONG lParam)
{
//	Data_Name *pDataName = (Data_Name *)lParam;
	m_pNameData->WriteIn((Data_Name *)lParam);

	return 0;
}

LONG CDatawriteTread::OnKeyNameDel(UINT wParam,LONG lParam)
{
	if (m_pNameData->GetRecordCount() > 0)
	{
		while(!m_pNameData->IsEOF())
		{	
		m_pNameData->MoveFirst() ;
			m_pNameData->Delete() ;
			m_pNameData->Requery() ;
		}
	}
	g_mmbd = false ;
	return 0;
}

LONG CDatawriteTread::OnKeyFee(UINT wParam,LONG lParam)
{
//	Data_Fee *pDataFee = (Data_Fee *)lParam;
	m_pFeeData->WriteIn((Data_Fee *)lParam);

	return 0;
}

LONG CDatawriteTread::OnKeyFeeDel(UINT wParam,LONG lParam)
{
	if (m_pFeeData->GetRecordCount() > 0)
	{
		while(!m_pFeeData->IsEOF())
		{	
		m_pFeeData->MoveFirst() ;
			m_pFeeData->Delete() ;
			m_pFeeData->Requery() ;
		}
	}
	g_febd = false ;
	return 0;
}

LONG CDatawriteTread::OnRespond(UINT wParam,LONG lParam)
{

/*	CString *s_num = (CString *)lParam;

	POSITION pos = m_pDataUseList ->GetHeadPosition();
	while(pos != NULL)
	{
		DataTemp *pDataTemp = (DataTemp *)m_pDataUseList->GetNext(pos) ;
		if(pDataTemp->pDataUse->record_ID == _atoi64(s_num->GetBuffer(500)))
		{
			m_pDataUseList->RemoveAt(pos);
			break;
		}
	}
*/
	//m_pDataUseList->RemoveHead() ;

	CString s_num=pMsg1;
	m_pDataUseList->RemoveAll() ;
	m_pMainData->m_strFilter.Empty();
	m_pMainData->Requery();
	m_pMainData->m_strFilter.Format("SERNUM='%s' and BACKUP1=0",s_num.Mid(3,15));

	m_pMainData->Requery();
	if(!m_pMainData->IsEOF())
	{
		m_pMainData->Edit();
		m_pMainData->m_BACKUP1=1;
		m_pMainData->Update();
//		m_pMainData->Requery(); hm 2001.10.18
	}

	return 0;
}

BOOL CDatawriteTread::GetData(Data_Use *pDataUse)//没用的函数
{
	if(m_pDataUseList->IsEmpty())
		return false;
	DataTemp *pDataTemp = (DataTemp *)m_pDataUseList->GetHead();
	memcpy(pDataUse,pDataTemp->pDataUse,sizeof(Data_Use));
	return true;
}

⌨️ 快捷键说明

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