I got it. so this is what I'll do: A> txt 10240 B> (malloc ptrAltogether 10240 bytes; Let sizeRemain = 10240;sizeDone=0) sendtxt A> "010010101010101......." B> (First packet is ready: var ptrTemp: array[0..MAX_PACK] of char; Zero(ptrTemp); if(sizeThisPack = Receive(ptrTemp) > 0) { sizeRemain -= sizeThispack; sizeone += sizeThisPack; copy memory( from ptrTemp to "ptrReceive+sizeDone", size=sizeThisPack); } A> ".......01010101" B> (Last packet is ready (Do all t he memory copying as above... this time, add the followings: generate hash, verify call a "Callback function" to notify the user, while passing the pointer to him
So my question is.. first, for the "ptrTemp". (1) What is the best number , i.e. a number that gaurentee it is not to o small, while not occupying too much memory? (2) Second, is it better to have ptrTemp as a local variable inside OnDataAvailable()? OR is it better to have it as a global variable? Third, is it etter to : have ptrTemp as a pointer only, GetMem for "ptrTemp" right at the beginning, then Free it at the very last? or have ptrTemp as a fixed size buffer determined at design time, and have it locally in OnDataAvailable? Thanks! Wilfried Mestdagh wrote: >Hello David, > > > >>So I ignored the zero und -1 returned by the Receive(), and it worked :) >> >> > >Great ! I'm glad it works for you :) > > > >>But the "TempSize" in my code was never changed. it was set as to a >>constant value en the constructor. >> >> > >Ok no problem then. But if your buffer has a constant size, then wy not >put it on the stack like this: >var > Buffer: array[0..TempSize] of char; >begin > // receive in buffer > > > >>decrease the GetMem(), Free() as much as possible.. so I think I'll do >>it before the first request, and free it after the last request... >> >> > >Yes that's another option. Then you only have 1 time allocation, but see >paragraph above. > > > >>for reassembling the original stream, what do you think ? "consecutive >>Realloc()" (First scenario) or "Array of pointer" (Second scenario)? >> >> > >Difficult to say wahts best because it is depending on what you exacly >wants or have to do with it. > >- if you have to save it to a file then you can: > - open the file at first packet > - receive in buffer > - write buffer direkt to file > - close file at last packet > -- the most fast is to use the low level routines: FileOpen(), etc... > >- TFileStream is another option, somewhat slower > >- if you have to do other things with it then you can > - use a TMemoryStream > - or a dynamicly allocate buffer that you take care yurself > > Both of course will reallocate when data grow, however you can for > both options set the size at first, then also only 1 memallcoation and > no reallocation. > >- array of pointer seems more difficult. Dont think you will have > advantage using it. > >--- >Rgds, Wilfried [TeamICS] >http://www.overbyte.be/eng/overbyte/teamics.html >http://www.mestdagh.biz > > > -- To unsubscribe or change your settings for TWSocket mailing list please goto http://www.elists.org/mailman/listinfo/twsocket Visit our website at http://www.overbyte.be