在用一个vc6工程代码的时候出现了如题的错误,google之后发现大部分文章都是说是字符集问题。而实际的问题是vector< char >的iterator不能被转化为char指针,解决办法很简单,由类似 (vectorChar.Begin()+i) 改为 (&vectorChar.Front()+i)的方法解决。
本也不是个问题,可为什么vc6可以转而vc9要改动呢?望有牛人告知。
另外还遇到一个错误,本来截了图,忘记传网盘了,回公司补充吧。
问题在于,一个winapp启动的一个进程A跟这个winapp发消息让winapp关闭,而这个消息要在这个winapp下的一个cwnd才能得到响应,而进程A在cwnd还不存在的时候就发消息,所以出错了。解决方法是在cwnd中再启动此进程。
工作之前没接触过MFC,到今天才有机会写一下线程退出的函数,通过调试对这部分理解深入了一点。
线程安全退出
线程定义:
CWinThread *m_hHttpThread;
在窗口构造函数中初始化:
m_hHttpThread = NULL;
线程启动:
if (m_hHttpThread==NULL)
{
m_hHttpThread = AfxBeginThread(StartHttp,this,THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED);
m_hHttpThread->m_bAutoDelete = FALSE;
m_hHttpThread->ResumeThread();
}
线程退出
if (m_hHttpThread!=NULL)
{
m_hHttpThread->PostThreadMessage(WM_QUIT,0,0);
DWORD dwExitCode;
while (1)
{
Sleep(200);
::GetExitCodeThread(m_hHttpThread->m_hThread,&dwExitCode);
if (dwExitCode == STILL_ACTIVE)
{
//do nothing
}
else
{
delete m_hHttpThread;
m_hHttpThread = NULL;
break;
}
}
}
TimeEvent
之前一个BUG,今天心血来潮去改,后面发现是因为某些时候TimeEvent没有得到CPU时间导致的。怪不得这个BUG被隐藏了这么久,我之前想去查,主管都不愿意给时间..
通过漫天的断点+CallStack+一次运气——问题发作的时候某TimeEvent没触发,终于发现了问题。
以后遇到这种时灵时不灵的BUG,可以往TimeEvent去想想。