线程问题,分不够再加

时间:2022-11-11 16:20:05
这是我第一次开帖子,各位好,小弟有礼了。  
我做了一个监视程序,是对某一网络内所有网络设备进行监视,其中检测状态时用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:sea_soft@163.com

19 个解决方案

#1


hThread:上一线程的句柄


调用
WaitForSingleObject(hThread,INFINITE);

#2


我试过了,还是不行

#3


代码不够详细,不能准确定位问题

#4


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

#5


我看了您的代码,觉得没有什么问题.也许是病毒,但这种情况也不可能不能发生啊

#6


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

#7


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

#8



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

#9


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

#10


0x74b67d0"指令引用的“0xddddddd"内存

表示你调用了对象已经被销毁的指针
或者引用了未被初始化的对象

#11


这是我地一次开贴,只要来的各位都给分,多谢各位了,谁给个例子,就另外给他再加100,不够还加

#12


等待中……

#13


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.

#14


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

#15


就要结账,进着有份

#16


既然你只用一个线程来工作,而且还用状态来阻塞掉主线程,那么用工作线程有什么用呢?

#17


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

#18


偶要分,谢谢

#19


UP一下

#1


hThread:上一线程的句柄


调用
WaitForSingleObject(hThread,INFINITE);

#2


我试过了,还是不行

#3


代码不够详细,不能准确定位问题

#4


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

#5


我看了您的代码,觉得没有什么问题.也许是病毒,但这种情况也不可能不能发生啊

#6


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

#7


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

#8



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

#9


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

#10


0x74b67d0"指令引用的“0xddddddd"内存

表示你调用了对象已经被销毁的指针
或者引用了未被初始化的对象

#11


这是我地一次开贴,只要来的各位都给分,多谢各位了,谁给个例子,就另外给他再加100,不够还加

#12


等待中……

#13


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.

#14


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

#15


就要结账,进着有份

#16


既然你只用一个线程来工作,而且还用状态来阻塞掉主线程,那么用工作线程有什么用呢?

#17


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

#18


偶要分,谢谢

#19


UP一下

#20