在JRU的server程序中,在MainFrame.cpp里,SendMessageToViewer线程中,在运行过程中可能引发让人摸不清头脑的“ntdll.dll!77bd6344()”问题,找了很长时间,都不知道问题出在哪,后来才发现是因为结束了两次线程引发的(我认为)。程序内容大概如下
if(head->next !=NULL)
{
sendresult=send(...);
if(sendresult<=0)
{
closesocket();
closeHandle(这个线程的句柄);
其他一些释放资源的处理;
}
}
else
{
sendresult=send(...);
if(sendresult<=0)
{
closesocket();
closeHandle(这个线程的句柄);
其他一些释放资源的处理;
}
}
表面上看,这些都是很合适的,似乎两个关闭线程的操作只能执行其中的一个,然而那个错误的发生正是因为关闭线程释放资源的操作执行了两次所造成的。
sendresult取值的获得,在发送成功时可以理解为立刻获得取值(其实也不一定),但是有时在网络中断的情况下,发送了很多数据帧,并没有发送成功,但是也不会立刻返回一个sendresult的值,当确定中断之后,会获得多次发送而返回的sendresult的值,所以上面两个关闭线程释放资源的操作都可能被同时执行,从而关闭了两次线程,从而产生了错误。
问题是解决了,但是我觉得这么理解可能不是特别的准确,只是自己的理解