好奇怪,我明明把这个线程锁定了,但是还是跳出来“123”,大家看看是怎么回事?
CEvent eventExcel;
CNetWatcherViewerDoc::CNetWatcherViewerDoc()
{
        CWinThread *m_pExcelThread=AfxBeginThread(ConstructExcel,this);
if(m_pExcelThread==NULL){
AfxMessageBox("创建Excel文件失败!");
}
eventExcel.Lock();
}UINT ConstructExcel(LPVOID pParam)
{
::AfxMessageBox("123");
return 0;
}

解决方案 »

  1.   

    我没用过CEvent
    但是看代码,好像没什么东西能阻止AfxMessageBox("123");,它是在子线程里运行的,你lock的是主线程?
      

  2.   

    eventExcel.Lock(); 
    这不是锁线程吗?
      

  3.   

    我经过调试发现, 
    CWinThread *m_pExcelThread=AfxBeginThread(ConstructExcel,this);
    if(m_pExcelThread==NULL){
    AfxMessageBox("创建Excel文件失败!");
    }
     
    eventExcel.Lock();

    CWinThread *m_pStoreThread=AfxBeginThread(Storedata,this);
    if(m_pStoreThread==NULL){
    AfxMessageBox("保存失败!");
    }
    //::WaitForSingleObject(eventStore.m_hObject,0);//等待接收线程 // start sub recv thread
    eventStore.Lock(); m_pRecvThread=AfxBeginThread(Recvdata,this);
    if(m_pRecvThread==NULL){
    AfxMessageBox("监听失败!");
    }
    eventReceive.Lock();
    这三个线程哪个放在最前面就不能锁定,到底是怎么回事呢?请高手来解释一下,谢谢
      

  4.   


    这个不是锁线程,只是重置codeeventExcel事件. 如果有线程等待这个事件的话会被锁住.
    但是没有看到你有任何代码将你的线程和这个codeeventExcel关联起来
      

  5.   


    CWinThread *m_pExcelThread=AfxBeginThread(ConstructExcel,this);
        if(m_pExcelThread==NULL){
            AfxMessageBox("创建Excel文件失败!");
        }
     
        eventExcel.Lock();可以用“异步”理解:AfxBeginThread是立即返回的,所以有两种可能情况,
    1)当执行到eventExcel.Lock();时,线程已经运行或运行完毕。
    2) 当执行到eventExcel.Lock();时,线程没有运行。再说,Lock是锁定临界区代码的,限制多个线程同时访问一个数据。
      

  6.   

    eventExcel.Lock();只是锁住了主线程,但ConstructExcel已经远行;后两个进程根本没有启动
      

  7.   

    你如果想用eventExcel锁住子线程的话,几个条件必须满足
    1. eventExcel.Lock必须在AfxBeginThread之前调用,因为线程一旦创建就会立刻运行,可能在你想锁它的时候,线程已经执行完了
    2. 在子线程内必须也来获得这个锁。否则你在主线程里上个锁,凭什么去影响子线程那?