snmp接收TRAP的线程出现堵塞问题

xggabc 2014-01-02 09:23:15
UINT SnmpTrap(LPVOID param)
{
HANDLE hNewTraps = NULL;

if (!SnmpMgrTrapListen(&hNewTraps)){
errMsg.Format("error on SnmpMgrTrapListen %d\n", GetLastError());
}
else{
errMsg.Format("TrapServer Started");
}
AfxMessageBox(errMsg);

while(TRUE){
DWORD dwResult;
if ((dwResult = WaitForSingleObject(hNewTraps, 0xffffffff))== 0xffffffff){
errMsg.Format("error on WaitForSingleObject %d\n",GetLastError());
AfxMessageBox(errMsg);
return 0;
}
else if (!ResetEvent(hNewTraps)){
errMsg.Format("error on ResetEvent %d\n", GetLastError());
AfxMessageBox(errMsg);
return 0;
}
else{
AsnObjectIdentifier enterprise;
AsnNetworkAddress IPAddress;
AsnInteger genericTrap;
AsnInteger specificTrap;
AsnTimeticks timeStamp;
RFC1157VarBindList variableBindings;

UINT i;
char *string = NULL;

while(SnmpMgrGetTrap(&enterprise, &IPAddress, &genericTrap,
&specificTrap, ×tamp, &variableBindings)) {
errMsg.Format("Trap Server : generic=%d specific=%d\n", genericTrap, specificTrap);
AfxMessageBox(errMsg);
if (IPAddress.length == 4) {
errMsg.Format(" from -> %d.%d.%d.%d\n",
(int)IPAddress.stream[0], (int)IPAddress.stream[1],
(int)IPAddress.stream[2], (int)IPAddress.stream[3]);
AfxMessageBox(errMsg);

}
if (IPAddress.dynamic) {
SNMP_free(IPAddress.stream);
}
for(i=0; i < variableBindings.len; i++) {
SnmpMgrOidToStr(&variableBindings.list[i].name, &string);
errMsg.Format("Variable = %s\n", string);
AfxMessageBox(errMsg);
if (string) {
SNMP_free(string);
}
//SnmpUtilPrintAsnAny(&variableBindings.list[i].value);
AsnPrint(&variableBindings.list[i].value,errMsg);
AfxMessageBox("Value = "+errMsg);
} // end for()
SnmpUtilOidFree(&enterprise);
SnmpUtilVarBindListFree(&variableBindings);
}
}
} // end while()
return 1;
}
用VC6.0生成一个线程,然后等待trap消息,发现一直堵塞在WaitForSingleObject ,有没有什么方法可以解决这个问题?
...全文
140 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

15,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧