当前位置:首页
开发技术指南» 文章正文
    引言:

    摘要: 用jni实现java调用c++的dll,java传对象给c++,c++收到后用socket发给server,c++的另一个线程监听,收到server的responese,调用java的方法,传对象给java。 问题是c++的监听线程如何调用java的方法,因为看jni的资料说,jnienv不能在c++的线程间共享,那么c++的监听线程如何得到正确的jnienv ......
    摘要: 我这里有个string类型$time: $time = "2005-08-09 12:54:31"; echo date("y-m-d",$time); 此时输出是: 1970-01-01 我想把$time转换成date类型以便输出成 y-m-d格式:2005-08-09 m格式: 08 d格式: 09 m-d格式:08-09 以及其他时间格式 请问......


不知道是什么具体的原因,望知情者告知

网络采用Iocp模型,每个新创建的socket关联到完成端口,并在工作线程中等待网络事件的发生。如果用户想主动关闭socket,则在关闭后也释放相应为保存上下文信息的内存空间。在关闭socket时,简单代码:  
  closesocket(sk);  
  ::Sleep(10);//如果拿掉这句,有可能会有问题  
  delete   pSocketContext;  
  问题就出在这,如果关闭socket后,没有Sleep(),马上释放内存,有可能系统会在关闭之后写已释放的内存。因为在pSocketContext中,其中有一个为OVERLAPPED的结构,是在WSARecv(...)时的投递所用的指针。  
   
  现在不解的是:有些时候,在closesocket()后,如没有加入Sleep()马上释放内存,系统还是会写上下文所在的OVERLAPPED结构的内存。这样就导致写入的内存空间为非法了。本人通过调试,发现了这种问题,在释放内存时,就可能会现出"User   breakpoint   called   from   0x?????"  
   
  有什么方法可以解决???那位遇到过这种问题。

NO.1   作者: teli_eurydice

不知道,帮你UP

NO.2   作者: dirdirdir3

如果怕影响效率可以考虑生成个线程来处理。

NO.3   作者: windcsn

你需要等待线程结束的时候再释放资源,使用waitforsingleobject可能比sleep效果要好,因为这个函数等待THREAD的HANDLE,等待线程执行完毕之后返回,这样可能不需要指定的时候,可能指定的时间不够,保证你释放资源的时候,没有THREAD再写了

NO.4   作者: DentistryDoctor

closesocket(m_hSocket);  
  while(!HasOverlappedIoCompleted((LPOVERLAPPED)pIOContextRead))Sleep(0);  
  while(!HasOverlappedIoCompleted((LPOVERLAPPED)pIOContextWrite))Sleep(0);  
  delete

NO.5   作者: windcsn

closesocket有可能是但方面的关闭,不能一定保证网络没有数据流动了,只有双方都关闭了才会彻底没有数据流动


    摘要: 我这里有个string类型$time: $time = "2005-08-09 12:54:31"; echo date("y-m-d",$time); 此时输出是: 1970-01-01 我想把$time转换成date类型以便输出成 y-m-d格式:2005-08-09 m格式: 08 d格式: 09 m-d格式:08-09 以及其他时间格式 请问......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE