📄 datawritetread.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 + -