问题标签 [runloop]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
cocoa - 从计时器停止 NSRunLoop
我制作了一个带有计时器的 RunLoop,它可以更新显示倒计时的标签。一旦倒计时达到零,我需要 RunLoop 停止,对于计时器正常结束的情况,我可以使用 runUntilDate,日期是当前日期 + 倒计时时间。问题是当用户在完成之前取消按钮的倒计时。我不知道如何告诉 RunLoop 停止取消按钮操作。这是 RunLoop 的代码:
该方法只是告诉标签在每个循环中减少 1。
我可以告诉取消按钮将标签更改为零,并让运行循环选择器检查值是否为零,但运行循环自己的选择器可以告诉它停止吗?
这些是我发现的最接近的,但它们似乎不能从 RunLoops 自己的选择器内部工作,或者至少我没有以任何方式尝试过它们。
基本上我需要让按钮告诉 RunLoop 停止,或者以某种方式从它自己的选择器中停止 RunLoop。
谢谢。
ios - 找出是什么阻塞了 iOS 中的主线程/运行循环?
有没有办法找出在 iOS 应用程序中阻塞主线程运行循环的原因,例如找到运行循环调用的所有函数,这些函数需要超过 0.1 秒才能完成?
问候, 约臣
objective-c - FoundationTool 中的 Runloop
我正在写一个基础工具。我必须做线程来分离不同的正在进行的任务。
我试图做线程,但它不断地崩溃。最后我找到了原因,我需要运行自己的 runloop。
有人可以提供一些简单的例子吗?我尝试了以下代码,但它不起作用。每次我运行它时,我都会因异常而崩溃?如何在 Foundation 工具中运行线程?
runloop - 如何在当前 RunLoop 中执行 GCDAsyncSocket 中的 didReadData?
我试图获得一个使用 GCDAsyncSocket 的简单示例,并且发现我缺少某些理解,希望各位好人能帮助解释这一点。
我在下面设置了 GCDAsyncSocket 的东西:
并且可以看到我的套接字测试服务器应用程序接收到字符串
“正在测试...123...\r\n”
但是当我让我的套接字测试服务器发回一个字符串时,我天真地期望didReadData委托执行
然而冷酷的现实迫使我学会了这一点,直到我打电话
... didReadData委托不会被调用。
好没问题。我得到它。
更多地阅读文档,它清楚地表明
AsyncSocket 是一个基于 RunLoop 的 TCP 套接字库。
所以现在我在看这个RunLoop的东西,在我看来它就像Microsoft Windows 中的 Message 循环。由于 iOS 是一个事件/msg 驱动的架构(就像 Win32 一样),那么我目前所在的默认主线程显然有它自己的 msg 循环来处理事件。
我的困惑现在让 iOS RunLoop 看起来像是一个单独的实体,必须使用才能让 GCDAsyncSocket 正常工作。
当它声明其默认的运行循环模式集是 NSDefaultRunLoopMode 时,它位于主线程中。
迷茫了吗?
所以在 Win32 下,我的 comm 事件处理代码如下所示:
它当然会在它自己的线程中(还没有使用 GCDAsyncSocket 到达那里),但这在某种程度上是它自己的“RunLoop”。
我如何使用GCDAsyncSocket做同样的事情,这样我就不会陷入使用[asyncSocket readDataWithTimeout]调用填充队列的一些轮询循环中?
我觉得我们需要更好的例子来使用这个库。
iphone - 如何在 iOS 中的应用程序处于后台时调用 Method?
我有一个类名,因为 myClassCalculate 有以下方法
我正在制作对象
现在当应用程序进入后台时,我想要这个
我该怎么办,以便在应用程序后台调用此方法
谢谢
ios - iPhone App 因“非公开 API”“忽略”而被拒绝
Apple 拒绝了我的应用程序,因为它使用的是非公共 api,即忽略。
我在我的应用程序中使用 XMPPFramework,在 XMPPParser 中,使用了以下代码行
编辑:如何避免使用这个忽略选择器来让我的应用程序获得批准?
objective-c - Runloop 不处理来自 dispatch_async 的事件
我在使用 dispatch_async 时遇到了一些问题。在我的应用程序主/UI 线程上,我在全局队列上调用 dispatch_async,并告诉它去执行一些具有完成处理程序的函数调用。我期待完成处理程序被调用,但有时似乎不会。
有趣的是,每当我在文本字段中输入内容时,我都会这样做以响应 controlTextDidChange。 当我单击文本字段时,所有完成处理程序都会立即触发。
我的猜测是,我所有的完成处理程序都在运行循环中排队,然后当我的 UI 元素失去焦点时,就会释放队列。我没有足够的运行循环专家知道在我输入文本字段或组合框时到底发生了什么,但也许它正在占用运行循环?
编辑:我认为它与运行循环模式有关,因为当我打印出运行循环模式时,它会打印为 NULL,但在完成处理程序中打印为默认模式时除外。我正在使用组合框,并且仅当组合框打开并展开时才会出现问题。 UIScrollView 阻止运行循环? 我认为这可能与这个问题有关。你们有什么感想?
iphone - 当应用程序将以后台模式发送时停止 NSThread 执行
我的 iphone 应用程序中有以下问题:
我有一个使用 TCP 套接字的 NSThread。当这个线程正在执行一个很长的功能时,我会在后台模式下发送应用程序。当我从这个后台线程返回时,从它离开的地方开始,然后再将应用程序引入后台。有没有办法停止该方法(我的线程)的执行,即使它还没有完成?
macos - 主线程没有在可可中停止
我正在 xcode4 中开发一个基于桌面的应用程序,将文件上传到 ftp、flickr 等。我在上传时使用多线程。我需要取消正在进行的整个上传。多线程是使用“ performselectorOnMainthread
”完成的。所以我需要从主线程中取消每个运行循环。我什至尝试“ CFRunLoopStop(CFRunLoopGetMain());
”来取消主线程本身,但我没有得到任何结果。
macos - CFRunLoop non-blocking wait for a buffer to be filled
I am porting an app reading data from a BT device to Mac. On the mac-specific code, I have a class with the delegate methods for the BT callbacks, like -(void) rfcommChannelData:(...)
On that callback, I fill a buffer with the received data. I have a function called from the app:
My problem is that this RunLoop makes the whole app un extremely slow. If I don't use default mode, and create my on runloop with a runlooptimer, the callback method rfcommChannelData never gets called. I create my one runloop with the following code:
Any idea why the default RunLoop slows down the whole app, or how to make my own run loop allow callbacks from rfcommchannel being triggered?
Many thanks,
Anton Albajes-Eizagirre