Hi Ken, Thanks for your reply.
You are right, there are other API build on top of a run loop. In main thread, I create a thread function in which I implement a class instance that can download file. The question is that after the first thread downloaded file , the second the thread will begin downloading file. That said, the first CFRunLoopRun will block the secord CFRunLoopRun. The main framework show below: in MainController.m: @implementation MainController .... [NSThread detachNewThreadSelector selector(TransferDownloadThreadProc:) toTarget elf withObject id)vAllParam]; .... - (void) TransferDownloadThreadProc:(id)userInfo { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; ... Transfer * download = [[Transfer alloc] init]; // Transfer class is customed by myself [download InitTransferParam:url withLocalFolder: strLocalFolder withUserName: strUsername withPassword: strPassword]; [download StartupDownload]; [NSThread exit]; [pool release]; } .... in Transfer.m static void DownloadCallBack(CFReadStreamRef readStream, CFStreamEventType type, void * clientCallBackInfo) { .... } @implementation Transfer .... - (Boolean)TransferDownload CFStringRef)urlString DstFolder CFURLRef)destinationFolder Username CFStringRef)user Password CFStringRef)pwd { ... CFReadStreamSetClient(readStream, kNetworkEvents, DownloadCallBack, &context); CFReadStreamScheduleWithRunLoop(readStream, CFRunLoopGetCurrent(), kCFRunLoopCommonModes); ... } - (void)StartupDownload { .... CFRunLoopRun(); .... } .... Regard, Chris Wu > From: k...@codeweavers.com > To: chrisgard...@live.com > Date: Sun, 17 May 2009 06:53:44 -0500 > CC: cocoa-dev@lists.apple.com > Subject: Re: Is there only one CFRunLoopRun which can implement in one process > > On May 17, 2009, at 12:04 AM, Chris Gardner wrote: > > > I have created two thread, and in each thread I call CFRunLoopRun > > function to download file from FTP server. > > It should not be necessary to create two threads. The whole point of > run loops is that they manage multiple asynchronous input sources, > allowing your program to process events from any of them as they > occur. It should be possible to manage multiple simultaneous FTP > downloads at once from your program's main thread. > > That said, what API are you using to perform the FTP downloads? > Running the run loop is part of the basic infrastructure. It doesn't > have anything to do with FTP downloads, specifically. You must be > using some other API built on top of a run loop, right? It may be > best to show your code. > > > > Can the CFRunLoopRun function implement in two PROCESS, but not in > > two THREAD. > > It is possible to have two threads within the same process, each > running their own run loop. The two will run independently and are > capable of processing input sources simultaneously. > > If you're seeing your FTP downloads being serialized, then it's due to > something else. The problem isn't a limitation of run loops. > > Regards, > 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/chrisgardner%40live.com > > This email sent to chrisgard...@live.com _________________________________________________________________ More than messages–check out the rest of the Windows Live™. http://www.microsoft.com/windows/windowslive/_______________________________________________ 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