代码很少,就贴上来,大家可以做测试:
//iocard.h
class InterruptFace
{
public:
virtual int GetVal()=0;
};class CIOCard : public InterruptFace
{
public:
CIOCard(){};
virtual ~CIOCard(){};
virtual int GetVal(){return 10;}
};class CCeInterrupt
{
public:
static CCeInterrupt* Instance();
static void Release();
static CCeInterrupt* _instance; void RegFace(InterruptFace* owner){_owner = owner;};
void Run();
InterruptFace* _owner;
protected:
CCeInterrupt(){}
~CCeInterrupt(){}
};//iocard.cpp
DWORD WINAPI  ThreadProcIST(PVOID pParam);
CCeInterrupt* CCeInterrupt::_instance = NULL;
CCeInterrupt* CCeInterrupt::Instance()
{
if(!_instance)
_instance = new CCeInterrupt();
return _instance;
}
void CCeInterrupt::Release()
{
}
void CCeInterrupt::Run()
{
HANDLE _hThread;
DWORD dwThreadID;
_hThread  = CreateThread(NULL, 0,
ThreadProcIST,   // 线程
this,            // 参数
CREATE_SUSPENDED,// 创建挂起的线程
&dwThreadID      // 线程 ID
);
ResumeThread( _hThread );
}DWORD WINAPI  ThreadProcIST(PVOID pParam)
{
CCeInterrupt* prun = (CCeInterrupt*)pParam;
int val = prun->_owner->GetVal(); //??? 调试报异常
int aa = val;
//TRACE("%d", val);
return 1;
}//mydlg.cpp
BOOL CMyDlg::OnInitDialog()
{
...
CIOCard card; CCeInterrupt* run = CCeInterrupt::Instance();
run->RegFace(&card);
run->Run();
}代码的意思是: 
1.写了个接口: InterruptFace
2.一个非常简单的类 CIOCard继承这个接口
3.一个很简单的类CCeInterrupt,接收CIOCard的注册,然后启动一个线程.4.问题在这个线程. 线程参数是CCeInterrupt*类型, 通过它可以访问CIOCard改写的接口函数. 但是, 访问失败:"Unhandled exception in MyDlg.exe : 0xC0000005 access violation".当然,这个异常还不算最为怪异. 如果,你用一个Console工程,或者在上面的
OninitionDialog()
{
..
run->Run();
Sleep(1000*60*3);
}
将不出现这个问题. 这是为什么呢? 高手来看看.

解决方案 »

  1.   

    CIOCard card;在线程执行的时候已经被释放。
    建议将card声明为全局变量或则阻塞Run函数知道线程结束。
      

  2.   

    楼上正解。run->Run();之后OnInitDialog退出,run被销毁,此时线程试图访问run,引起VA异常
      

  3.   

    DWORD WINAPI ThreadProcIST(PVOID pParam)
    {
    CCeInterrupt* prun = (CCeInterrupt*)pParam
    int val = prun->_owner->GetVal(); //异常在这里. _owner定义: InterruptFace* _owner;
    ...
    }
    跟踪过"prun->_owner"的值为0x0012f64c,与 RegFace()值相同. 
    但用prun访问CCeInterrupt中的其他数据,这个做过多次测试,没有任何问题. 
      

  4.   

    to:wangk(倒之) pomelowu(羽战士)唉... 一叶障目,不见山. 查了好长时间,呵呵,就是没发现是个局部变量. 唉...