这是我第一次开帖子,各位好,小弟有礼了。  
我做了一个监视程序,是对某一网络内所有网络设备进行监视,其中检测状态时用PING,不断对所有设备PING,所以开了线程来PING,但是出现:”0x74b67d0"指令引用的“0xddddddd"内存,该内存不能为"read",我想这样:当一个IP送来需要PING时要等待上一个线程结束才能开这个线程,该怎么做。请各位帮帮忙,能给出代码吗?多给分,不够继续加,  
BOOL  CNetPing::Ping(CPingModal  &DeviceSrc,CPingModal  &  DeviceTarget)  
{  
           //UpdateData(true);    
             
             ……  
           if(m_hEventStartPing!=NULL)  
           {            WaitForSingleObject(m_hEventKillPing  ,INFINITE);  
                         
           }                             ………………
         AfxBeginThread(PingThread,this);
           }  
           SetEvent(m_hEventStartPing);  
             
           return    -1;  
             
}  
 
 
BOOL  CNetPing::Initialize()  
{  
         .m_hEventStartPing  =  CreateEvent(NULL,  FALSE,  FALSE,  NULL);    
   
           m_hEventKillPing    =  CreateEvent(NULL,  TRUE,  FALSE,  NULL);    
                             return  TRUE;  
}  
UINT  CNetPing::PingThread(LPVOID  pParam)  
{    
           ……………………  
             
 
            SetEvent(m_hEvenPingtKilled);              
           return  1;  
 
}  
m_hEventKillPing  ,m_hEventStartPing都已经在构造中初始化,我的E-MAIL:[email protected]

解决方案 »

  1.   

    hThread:上一线程的句柄
    调用
    WaitForSingleObject(hThread,INFINITE);
      

  2.   

    省略的是批PING的内容,太长贴不开,对线程控制来说没有关系,我想用线程控制这种方法来让下一个PING操作等待上一个完成之后再开线程,各位能讲讲过程方法吗,用到的函数说的清楚些,最好有例子代码,谢谢了,分没问题,不够再给加200,再不够再加,哪位能说说啊,最好有例子说说实现过程。E-MAIL:[email protected]
      

  3.   

    WaitForSingleObject(m_hEventKillPing  ,INFINITE);       
    WaitForSingleObject(m_hEventKillPing  ,INFINITE);                       
      

  4.   

    替换 if(m_hEventStartPing!=NULL)  
               {            WaitForSingleObject(m_hEventKillPing  ,INFINITE);  
                             
               }
      

  5.   


    WaitForSingleObject(m_hEventStartPing,INFINITE);       
    WaitForSingleObject(m_hEventKillPing  ,INFINITE);
      

  6.   

    这种处理是不安全的,这样,开一个缓冲队列来缓存ping命令,然后线程监控该队列,如果不为空则取出头元素进行ping,这样肯定是执行完前一个再执行下一个,而且只需要开一个线程即可!
      

  7.   

    0x74b67d0"指令引用的“0xddddddd"内存表示你调用了对象已经被销毁的指针
    或者引用了未被初始化的对象
      

  8.   

    that means you are stepping on the memory which you don't actually hold. the pointer must point to a invalid memory address and you try to access it's content.
    no error in the code snippet, must be in the one you don't post on.
      

  9.   

    if(AfxIsValidAddress(m_hEventStartPing))  
               {            WaitForSingleObject(m_hEventKillPing  ,INFINITE);  
                             
               }
      

  10.   

    建议再开一个线程,让此线程始终循环监视PING线程,否则在同一个线程内是不好实现的!!