我做了一个监视程序,是对某一网络内所有网络设备进行监视,其中检测状态时用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);
调用
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);
WaitForSingleObject(m_hEventKillPing ,INFINITE);
#7
替换 if(m_hEventStartPing!=NULL)
{ WaitForSingleObject(m_hEventKillPing ,INFINITE);
}
{ WaitForSingleObject(m_hEventKillPing ,INFINITE);
}
#8
为
WaitForSingleObject(m_hEventStartPing,INFINITE);
WaitForSingleObject(m_hEventKillPing ,INFINITE);
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.
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);
}
{ WaitForSingleObject(m_hEventKillPing ,INFINITE);
}
#15
就要结账,进着有份
#16
既然你只用一个线程来工作,而且还用状态来阻塞掉主线程,那么用工作线程有什么用呢?
#17
建议再开一个线程,让此线程始终循环监视PING线程,否则在同一个线程内是不好实现的!!
#18
偶要分,谢谢
#19
UP一下
#20
#1
hThread:上一线程的句柄
调用
WaitForSingleObject(hThread,INFINITE);
调用
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);
WaitForSingleObject(m_hEventKillPing ,INFINITE);
#7
替换 if(m_hEventStartPing!=NULL)
{ WaitForSingleObject(m_hEventKillPing ,INFINITE);
}
{ WaitForSingleObject(m_hEventKillPing ,INFINITE);
}
#8
为
WaitForSingleObject(m_hEventStartPing,INFINITE);
WaitForSingleObject(m_hEventKillPing ,INFINITE);
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.
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);
}
{ WaitForSingleObject(m_hEventKillPing ,INFINITE);
}
#15
就要结账,进着有份
#16
既然你只用一个线程来工作,而且还用状态来阻塞掉主线程,那么用工作线程有什么用呢?
#17
建议再开一个线程,让此线程始终循环监视PING线程,否则在同一个线程内是不好实现的!!
#18
偶要分,谢谢
#19
UP一下