在做一个屏幕即时监视程序时,发现一问题,就是用SendStream送出流后,无法再操作这个流:我有个全局的MyStream.处理后,用SendStream顺利发出,对方机也收到,但当我再次操作这个MyStream时(如设置它的Position,调用Clean)程序就会出错……相反,当我用局部的Stream时, 只要SendStream后,只要不调用这个局部Stream的Free程序照常,还很稳。但不知没有FREE掉的会不会让内存泄漏。以我菜鸟的经验觉得有两可能:
一:SendStream这方法会长时占过此流,使得无法操作。(是样就太惨了,要怎么才可以让它正确的FREE掉呢?)二:就是SendStream负责把它传送时,顺便FREE掉^_^,(呵呵,高手被我气到了没?有想象力哦我。)不过, 第二种可能性不大了,我看了SendStream前后的内存地址(@MyStream),没变,看来第一种的可能性很大,我要怎么办呀??帅哥&高手们??
一:SendStream这方法会长时占过此流,使得无法操作。(是样就太惨了,要怎么才可以让它正确的FREE掉呢?)二:就是SendStream负责把它传送时,顺便FREE掉^_^,(呵呵,高手被我气到了没?有想象力哦我。)不过, 第二种可能性不大了,我看了SendStream前后的内存地址(@MyStream),没变,看来第一种的可能性很大,我要怎么办呀??帅哥&高手们??
解决方案 »
- 请帮忙把c++2次开发接口转为delphi,声明!
- delphi+SQL2000数据库 开发库存管理系统
- 从左边开始取字符串,为什么错????
- 关于数据库读取数据的问题~
- 请做过sle4442卡的朋友进来!
- 我在制作安装程序时,碰到一个问题?请大家帮忙!
- 如何用纯WINSOCK写一个发送EMAIL的程序
- 怎么播放格式为:*.rmvb的文件
- richtext
- 多年编程来一个有趣的问题共同讨论:今有一个ole对象,它有若干个属性(方法),如何让它们动态关联到一起来?
- 一个简单的问题,使用Interbase数据库,使用那种方式连接好一些。
- Bmp图形用StretchBlt缩小,图形质量严重损失? (在线等候)
var
Buffer: array[0..4095] of Byte;
.............
procedure DropStream;
begin
if FDropAfterSend then Disconnect(FSocket);
FDropAfterSend := False;
FSendStream.Free;
FSendStream := nil;
end;begin
....
....
....
虽多次调用内部过存 DropStream, 它真FREE了吗???
为什么,我的MyStream指针不为nil???
end;
只是它指向的内存已经被释放了。
两个函数:
SendStream
和
SendStreamThenDrop
因为缺省值是FALSE,所以调用后一个函数才会帮你释放流。
//-------------------------------------------------------------
function TCustomWinSocket.SendStreamThenDrop(AStream: TStream): Boolean;
begin
FDropAfterSend := True;
Result := SendStream(AStream);
if not Result then FDropAfterSend := False;
end;