BOOL CViewPropertySheet::OnInitDialog()
{
ModifyStyleEx(0,WS_EX_CONTROLPARENT);
BOOL bResult = CPropertySheet::OnInitDialog();
SetTimer(1,1000,NULL); //<<-----定时器在这里设置的
// Resize the CTabCtrl and PropertyPages
PostMessage(WM_ADJUST);
return bResult;
}
void CViewPropertySheet::OnTimer(UINT nIDEvent)
{
SetActivePage(2);
char Num[20];
CPropPage4 cp4;
CString a="0,,13969110924";
cp4.ReCall(a);
KillTimer(1);
}
CString CPropPage4::ReCall(CString PhoNum)
{
try
{
m_pConnection.CreateInstance("ADODB.Connection");
CString strConnect="Provider=Microsoft.Jet.OLEDB.4.0;\
Data Source=Database\\City.mdb;Persist Security Info=False";
m_pConnection->Open((_bstr_t)strConnect,"","",adModeUnknown);
}
catch(_com_error e)
{
AfxMessageBox("数据库连接错误",0,0);
}
m_pRecordset.CreateInstance(__uuidof(Recordset));
m_pRecordset_tel.CreateInstance(__uuidof(Recordset));
m_pRecordset_home.CreateInstance(__uuidof(Recordset));
CString sql;
sql.Format("select * from TreeItem where SecNum = '%s' ",PhoNum);
_variant_t vt;
vt.vt = sql.IsEmpty() ? VT_NULL:VT_BSTR;
vt.bstrVal = sql.AllocSysString();
m_pRecordset->Open(vt,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
if(m_pRecordset->adoEOF)
{
CString sqltel;
sqltel.Format("select * from TreeItem where tel = '%s' ",PhoNum);
_variant_t vt1;
vt1.vt = sqltel.IsEmpty() ? VT_NULL:VT_BSTR;
vt1.bstrVal = sqltel.AllocSysString();
m_pRecordset_tel->Open(vt1,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
if(m_pRecordset_tel->adoEOF)
{
CString sqlwork;
sqlwork.Format("select * from TreeItem where work = '%s' ",PhoNum);
_variant_t vt2;
vt2.vt = sqlwork.IsEmpty() ? VT_NULL:VT_BSTR;
vt2.bstrVal = sqlwork.AllocSysString();
m_pRecordset_home->Open(vt2,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
if(m_pRecordset_home->adoEOF)
{
m_strEdit_name="未知";
m_strEdit_phonum=PhoNum;
}
else{
CString tel,name,work;
name=(LPCTSTR)(_bstr_t)m_pRecordset_home->GetCollect("Name");
work=(LPCTSTR)(_bstr_t)m_pRecordset_home->GetCollect("ParentItem");
tel=(LPCTSTR)(_bstr_t)m_pRecordset_home->GetCollect("SecNum");
m_strEdit_name=name;
m_strEdit_tel=work;
m_strEdit_phonum=tel;
UpdateData(true);
}
}
else{
CString tel2,name2,work2;
name2=(LPCTSTR)(_bstr_t)m_pRecordset_tel->GetCollect("Name");
work2=(LPCTSTR)(_bstr_t)m_pRecordset_tel->GetCollect("ParentItem");
tel2=(LPCTSTR)(_bstr_t)m_pRecordset_tel->GetCollect("SecNum");
m_strEdit_name=name2;
m_strEdit_tel=work2;
m_strEdit_phonum=tel2;
UpdateData(true);
}
}
else
{
CString tel3,name3,work3;
name3=(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("Name");
work3=(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("ParentItem");
tel3=(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("SecNum");
m_strEdit_name=name3;
m_strEdit_tel=work3;
m_strEdit_phonum=tel3;
UpdateData(true);
MessageBox("123");
MessageBox("456");
}
KillTimer(1);
return "";
}
代码如上,请问这样设置定时器对吗?为什么我的定时器kill不掉,会一直执行呢
7 个解决方案
#1
定时器被kill了两次啊。你看看到底有没有走killTimer那段。还有就是setTimer了几次。如果当时被kill了,又重新创建了也不会停止。、
还有就是你有try Catch,是不是捕获到异常,直接中断了,没有继续往下走。
还有就是你有try Catch,是不是捕获到异常,直接中断了,没有继续往下走。
#2
自己顶
#3
我的定时器只要一执行到killTimer就开始执行ontime,这是怎么回事?
#4
void CViewPropertySheet::OnTimer(UINT nIDEvent)
{
if(1 == nIDEvent)
{
SetActivePage(2);
char Num[20];
CPropPage4 cp4;
CString a="0,,13969110924";
cp4.ReCall(a);
KillTimer(1);
}
}
#5
你把定时器的时间放长,比如5-10秒,然后看走的逻辑。还有,到底是哪个killTimer起作用的
BOOL KillTimer( int nIDEvent );是个BOOL值,你可以监视下其返回值是否正确。多打点TRACE数据出来
BOOL KillTimer( int nIDEvent );是个BOOL值,你可以监视下其返回值是否正确。多打点TRACE数据出来
#6
把KillTimer放到OnTimer第一句,初步估计是你的MessageBox阻断了
#7
6楼的这样就可以kill掉了,谢谢
#1
定时器被kill了两次啊。你看看到底有没有走killTimer那段。还有就是setTimer了几次。如果当时被kill了,又重新创建了也不会停止。、
还有就是你有try Catch,是不是捕获到异常,直接中断了,没有继续往下走。
还有就是你有try Catch,是不是捕获到异常,直接中断了,没有继续往下走。
#2
自己顶
#3
我的定时器只要一执行到killTimer就开始执行ontime,这是怎么回事?
#4
void CViewPropertySheet::OnTimer(UINT nIDEvent)
{
if(1 == nIDEvent)
{
SetActivePage(2);
char Num[20];
CPropPage4 cp4;
CString a="0,,13969110924";
cp4.ReCall(a);
KillTimer(1);
}
}
#5
你把定时器的时间放长,比如5-10秒,然后看走的逻辑。还有,到底是哪个killTimer起作用的
BOOL KillTimer( int nIDEvent );是个BOOL值,你可以监视下其返回值是否正确。多打点TRACE数据出来
BOOL KillTimer( int nIDEvent );是个BOOL值,你可以监视下其返回值是否正确。多打点TRACE数据出来
#6
把KillTimer放到OnTimer第一句,初步估计是你的MessageBox阻断了
#7
6楼的这样就可以kill掉了,谢谢