FWIW, that's exactly what AsyncSocket does, using delegate callbacks (pretty
typical Cocoa pattern). This is one reason why I suggested it.

On Wed, Jan 20, 2010 at 3:06 PM, nicolas berloquin <cepak...@gmail.com>wrote:

> I may not have fully grasped your problem but you seem to say that getting
> 'pieces' of the reply generates a lot of problems for you.
> Couldn't you have a socket that buffers the replies and that sends the
> whole aggregated messages to the rest of the app when done ?
> You could have a special 'message' sent by the server to let you know that
> it's done sending or (if it can know beforehand how much will be coming)
> One thing you could look at are notifications. They're very easy to use and
> are a cool way to send data around an app (locally) asychronously or from
> background threads.
>
>
> Le 20 janv. 2010 à 21:09, Ken Thomases <k...@codeweavers.com> a écrit :
>
>  On Jan 20, 2010, at 1:42 PM, Carter R. Harrison wrote:
>>
>>  On Jan 20, 2010, at 2:23 PM, Ken Thomases wrote:
>>>
>>>  If you're using lots of CPU time, then you're not blocking, you're
>>>> spinning.  When a thread is blocked, it does nothing and consumes no CPU
>>>> time.
>>>>
>>>> Now, blocking is bad in the main thread of a GUI app, but if you're
>>>> writing non-GUI code, it can be a perfectly sensible design approach.
>>>>  However, you have to actually implement blocking!
>>>>
>>>
>>> Ken - thanks for the info.  I had thought the same thing when I wrote the
>>> code so I must be doing something wrong as you said.  Here's my method that
>>> sends data and then waits for the response back from the server.  I've
>>> paired my code down so it is a bit simpler than it actually is, but the gist
>>> of it is the same.  Here the request is sent to the server and the method
>>> does not return until 1024 bytes of data has been returned.  I'm basically
>>> calling [NSInputStream hasBytesAvailable] and if it returns NO then I am
>>> using the sleep() method to sleep the thread for 100ms.  Over a fast
>>> connection the CPU usage is very very low (< 2%), but on a slower connection
>>> where the server could take a couple hundred milliseconds to return the CPU
>>> usage hovers around 25 or 30% - way too high for regular use.  In the code,
>>> "is" is an NSInputStream and "os" is an NSOutputStream.  I would greatly
>>> appreciate your insight on this.
>>>
>>
>> First, you're not sleeping for 100ms.  sleep() takes an integer number of
>> seconds.  You're passing .1 which is getting truncated to 0.  So, you're
>> calling sleep(0).  That may not be a total no-op -- the kernel will probably
>> yield your time slice to another process or thread -- but it doesn't block
>> your thread.
>>
>> Second, you need not invoke -hasBytesAvailable.  Just invoke
>> -read:maxLength:.  That will block if no data is available.
>>
>> Cheers,
>> Ken
>>
>> _______________________________________________
>>
>> Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)
>>
>> Please do not post admin requests or moderator comments to the list.
>> Contact the moderators at cocoa-dev-admins(at)lists.apple.com
>>
>> Help/Unsubscribe/Update your Subscription:
>> http://lists.apple.com/mailman/options/cocoa-dev/cepakare%40gmail.com
>>
>> This email sent to cepak...@gmail.com
>>
> _______________________________________________
>
> Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)
>
> Please do not post admin requests or moderator comments to the list.
> Contact the moderators at cocoa-dev-admins(at)lists.apple.com
>
> Help/Unsubscribe/Update your Subscription:
> http://lists.apple.com/mailman/options/cocoa-dev/steven.degutis%40gmail.com
>
> This email sent to steven.degu...@gmail.com
>



-- 
Steven Degutis
http://www.thoughtfultree.com/
http://www.degutis.org/
_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to