My original reply was too long for Cocoa Dev; then I lost it. So this is another (small draft)...
It appears I'll be working with blocks, keeping the data/functioning local to the stack & copying data out to the GUI: typedef sat_t (^MyBlock)(); // C - function: int addFoot(int k) { return (++k); } // Block declaration: MyBlock MakeSat() { __block sat_t sat; __block tle_t tle; __block int k = 0; return Block_copy( ^ { sat.satName = "George"; sat.tsince += 1.0; k = addFoot(k); sat.footprint = k; predict_calc1(2); // ok. predict_calc2(&sat, 2); //...passing struct{} ptr. return sat; }); } // end MyBlock(). // -------------------------------- int main(void) { MyBlock myBlock = MakeSat(); printf("\nMyBlock value: %s, since= %g, addFoot= %g TLE name= %s\n", myBlock().satName, myBlock().tsince, myBlock().footprint, myBlock().tle.name); Block_release(myBlock); return 0; } --------------- Output: MyBlock value: Henry, since= 3, addFoot= 2 TLE name= Frederick C. Lee ... So I'll work with your (B) paradigm: keep the data 'regional' w/in a block. That way, I can pass the data amongst functions w/in a block and copy the result to the 'outside' calling ObjC object. Ric. On Nov 6, 2010, at 11:24 AM, lwj wrote: > > There it too much missing here to really understand whats going on. There is > no context for 'sat_t workingSat'. This can mean very different things > depending on where it is. When initSatWorkArea(&workingSat) is called you > are passing a pointer to workingSat and not the structure itself. > > Based on what you have above I think there are 2 possibilities for where > workingSat 'lives'. > > A.) > > sat_t workingSat; > > void someFunc(void) { > > initSatWorkArea(&workingSat); > > ... > } > > In this case workingSat exists in the data section (neither heap nor stack) > of your program. There is *only* 1 of them. You can share it between threads > but every thread will see the same thing. Unless you want every thread > working on the same thing this is *not* what you want. > > > B.) > > void someFunc(void) { > > sat_t workingSat; > > initSatWorkArea(&workingSat); > > ... > } > > In this case workingSat exists on the stack. A new one is created every time > someFunc is called. *However*, when someFunc() returns workingSat *NO LONGER > EXISTS*. From your description it sounds like initSatWorkArea might pass a > pointer to workingSat to a thread but workingSat goes away once someFunc > returns. > > There is a good chance that neither one of these is what you want. > > Wayne > > > > > _______________________________________________ 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