16,471
社区成员
发帖
与我相关
我的任务
分享
DWORD WINAPI UpdateDtbb(void* lpvoid) //线程函数
{
CFzzqJCJDlg *dlg = (CFzzqJCJDlg*)lpvoid;
g_db_report=new CADODatabase;
if (g_db_report==NULL)
return 0;
ReadIniSettings();
CString strConnection_report,strtips;
strConnection_report.Format("Provider=OraOLEDB.Oracle.1;Data Source=%s;Persist Security Info=False",g_IniSettings.Server_DB.szDBName);
if (!g_db_report->Open(strConnection_report,g_IniSettings.Server_DB.szUser,g_IniSettings.Server_DB.szPwd))
{
delete g_db_report;
g_db_report=NULL;
strtips = "数据库连接失败";
dlg->AppendLog(strtips);
dlg->GetDlgItem(IDC_QUIT)->EnableWindow(TRUE);
dlg->GetDlgItem(IDC_CONFIG)->EnableWindow(TRUE);
return 0;
}
else
{
strtips = "数据库连接成功";
dlg->AppendLog(strtips);
}
CString strDate,szTitle,strValue;
CString strSql;
/////////////////////////////////最后修改日期 债券代码 债券名称 票面利率
strSql.Format("select * from tzjc_signals");
CADOCommand adoCmdGyzx(g_db_report,strSql,CADOCommand::CmdText);
CADORecordset adoRsGyzx(g_db_report);
if (!adoRsGyzx.Execute(&adoCmdGyzx))
{
strtips = "数据库查询失败";
dlg->AppendLog(strtips);
dlg->GetDlgItem(IDC_QUIT)->EnableWindow(TRUE);
dlg->GetDlgItem(IDC_CONFIG)->EnableWindow(TRUE);
return 0;
}
else
{
strtips = "数据库查询成功";
dlg->AppendLog(strtips);
}
int nReportNum=adoRsGyzx.GetRecordCount();
strtips.Format("表tzjc_signals共有%d条数据记录",nReportNum);
dlg->AppendLog(strtips);
if(nReportNum<=0)
{
adoRsGyzx.Close();
Sleep(5);
return 0;
}
adoRsGyzx.MoveFirst();
for (int i =0;i<nReportNum && !adoRsGyzx.IsEof();adoRsGyzx.MoveNext(),i++)
{
if (WaitForSingleObject(event_stop1,0)==WAIT_OBJECT_0)
return 1;
adoRsGyzx.GetFieldValue("tradeday",strValue);
strtips.Format("记录%d交易日:%s",i+1,strValue);
dlg->AppendLog(strtips);
}
strtips = "查询结束";
dlg->AppendLog(strtips);
dlg->GetDlgItem(IDC_QUIT)->EnableWindow(TRUE);
dlg->GetDlgItem(IDC_STOP)->EnableWindow(FALSE);
dlg->GetDlgItem(IDC_CONFIG)->EnableWindow(TRUE);
return 1;
}
void CFzzqJCJDlg::OnStart() //按钮消息 创建线程
{
GetDlgItem(IDC_CONFIG)->EnableWindow(FALSE);
GetDlgItem(IDC_QUIT)->EnableWindow(FALSE);
CString strtips;
strtips = "开始连接数据库...";
AppendLog(strtips);
event_stop1 = CreateEvent(NULL, TRUE, FALSE, NULL);
ThreadHandle1 = CreateThread(NULL,1024,(LPTHREAD_START_ROUTINE)UpdateDtbb,this,0,NULL);
}
void CFzzqJCJDlg::OnStop() //按钮消息 停止线程
{
CString strtips;
GetDlgItem(IDC_QUIT)->EnableWindow(FALSE);
strtips.Format("正在停止...请稍候");
AppendLog(strtips);
SetEvent(event_stop1);
BOOL bGetCode;
DWORD nExitCode;
Sleep(500);
bGetCode= GetExitCodeThread(ThreadHandle1,&nExitCode);
strtips = "获取到线程1退出码";
AppendLog(strtips);
if(!bGetCode||STILL_ACTIVE==nExitCode)
{
DWORD dwTmp=WaitForSingleObject(ThreadHandle1,3000);//等待3000的时间,让句柄(事件)执行完,返回WAITE_OBJECT_0或者WAITE_TIMEOUT
if (dwTmp!=WAIT_FAILED && dwTmp!=WAIT_OBJECT_0)
{
strtips = "正在执行线程1退出";
AppendLog(strtips);
TerminateThread(ThreadHandle1 , 0); //终止线程
CloseHandle(ThreadHandle1);
}
}
bGetCode= GetExitCodeThread(ThreadHandle1,&nExitCode);
strtips = "线程1已退出";
AppendLog(strtips);
GetDlgItem(IDC_STOP)->EnableWindow(FALSE);
GetDlgItem(IDC_QUIT)->EnableWindow(TRUE);
GetDlgItem(IDC_CONFIG)->EnableWindow(TRUE);
}