gpt4 book ai didi

objective-c - 结束在辅助线程中运行的 while 循环?

转载 作者:搜寻专家 更新时间:2023-10-30 20:03:56 26 4
gpt4 key购买 nike

我有一个应用程序,用户在其中输入应用程序应重复某个操作的次数。用户输入的值被获取并用于 while 循环,该循环重复用户指定的操作次数。这个过程可能会很长,我希望有一个按钮可以让用户结束这个过程。我已将重复进程移至辅助线程 (NSThread),以便用户可以在进程运行时继续与用户界面交互。当用户按下“停止”按钮时,我无法停止重复过程。允许我的主线程与它需要停止在其中运行的 while 循环的辅助线程通信的最佳方法是什么?任何帮助将不胜感激。

谢谢,

山姆

这似乎对我不起作用......我使用@property(原子,保留)声明了两个原子NSNumbers。它们都设置为整数值 0。这是我在辅助线程中运行的方法中运行的循环:

 int i = 0;

while (i < timesToRun && [numberOne intValue] == 0) {
[self doSomething];
numberOne = numberTwo;
i++;
}'

我的停止按钮调用一个方法,将 numberTwo 的整数值更改为“1”。出于某种原因,这并没有停止循环。我做错了什么吗?

编辑:谢谢大家的帮助。经过反复试验,我终于找到了解决问题的办法。我只是创建了一个 .strings 文件,该文件除了文本“NO”外都是空的。我在加载应用程序时将文本设置为“NO”。在我的新 while 循环中,我使用 NSString stringWithContentsOfFile 检查文件的值是否已更改。当我想结束循环时,我调用一个写入文件并将值更改为“YES”的方法。这是我的新循环:

NSString* path = [[NSBundle mainBundle] pathForResource:@"StopFile" ofType:@"strings"];

NSString *theString = [[NSString alloc] initWithContentsOfFile:path];
NSLog(@"TheString: %@", theString);

int i;

for (i = 0; i < timesToRunScript && theString == [NSString stringWithFormat:@"NO"]; i++) {
[scriptToRun executeAndReturnError:nil];
NSString *theString = [[NSString alloc] initWithContentsOfFile:path];
NSLog(@"string: %@", theString);
if (theString == [NSString stringWithFormat:@"Yes"]) {
break;
}

如果您发现任何可以改进的地方,请告诉我。谢谢。

最佳答案

您可以在执行 while 循环的对象上添加一个原子属性,并在循环的每次迭代中检查该属性。

使属性成为原子属性将使其成为线程安全的,这样您就可以在一个线程中更改它,并在另一个线程中读取它。

关于objective-c - 结束在辅助线程中运行的 while 循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7127111/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com