【问题标题】:Runloop not getting fired when scheduled with streams使用流调度时不会触发 Runloop
【发布时间】:2011-09-16 22:12:24
【问题描述】:

我目前正在为我的项目做一个 FTP 客户端。我已经使用 runloop 安排了 readstream/writeStream 从硬盘读取文件/将文件写入硬盘并将其发送到服务器。上传和下载文件后,我从运行循环中取消了流的调度。这适用于我第一次发送文件。当我第二次尝试发送文件时。流正在通过运行循环创建和调度。但是运行循环不会触发。我不知道。谁能帮帮我

以下是我用来安排和取消安排的代码

上传

readStream=CFReadStreamCreateWithFile(kCFAllocatorDefault, fileURL);
writeStream=CFWriteStreamCreateWithFTPURL(kCFAllocatorDefault,(CFURLRef ) ftpURL);
BOOL readStreamOpened=CFReadStreamOpen(readStream);
BOOL clientCallBackSet=CFWriteStreamSetClient(writeStream, kNetworkEvents, MyUploadCallBack, &callBackContext);

CFWriteStreamScheduleWithRunLoop(writeStream, CFRunLoopGetCurrent(), kCFRunLoopCommonModes);
CFReadStreamUnscheduleFromRunLoop(syncStructure->readStream, CFRunLoopGetCurrent(), kCFRunLoopCommonModes);

正在下载:

readStream=CFReadStreamCreateWithFTPURL(kCFAllocatorDefault,(CFURLRef)ftpURL);
writeStream=CFWriteStreamCreateWithFile(kCFAllocatorDefault,fileURL);
Boolean writeStreamOpened=CFWriteStreamOpen(writeStream);
BOOL status= CFReadStreamSetClient(readStream, kNetworkEvents,MyDownloadCallBack,& callBackContext);
CFReadStreamScheduleWithRunLoop(readStream, CFRunLoopGetCurrent(), kCFRunLoopCommonModes);
CFWriteStreamUnscheduleFromRunLoop(syncStructure->writeStream, CFRunLoopGetCurrent(), kCFRunLoopCommonModes);

谁能帮帮我。这两天我都在头疼。

【问题讨论】:

  • 您是在单独的线程上运行它吗?如果是这样,您是否在设置流后运行运行循环?
  • 不,我在主线程上运行它。我知道我应该通过提供控制语句来为运行循环提供运行方法。但是我不能给主线程运行循环运行命令。有什么解决办法吗?

标签: objective-c ios ftp stream nsthread


【解决方案1】:

几天后,我解决了这个问题。我使用参考指南中提到的轮询方法检查了代码。当我这样做时,我注意到问题出在我的 ftp 服务器中的超时设置上。服务器超时后,它没有接受任何连接,因此我的 runloop 正在等待调用回调函数

【讨论】:

    猜你喜欢
    • 2023-03-17
    • 1970-01-01
    • 2021-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多