在返回位置之前如何等待计时器?

Posted

技术标签:

【中文标题】在返回位置之前如何等待计时器?【英文标题】:How do I wait on a timer before returning location? 【发布时间】:2012-02-11 22:37:14 【问题描述】:

我正在尝试编写一个返回当前位置的方法。当我等待 30 秒、1 分钟或 2 分钟(在设置中设置)时,我会显示一个警报视图。我允许用户使用 alertView 按钮绕过计时器等待,该按钮接受我将在警报视图中显示和更新的当前准确性。我的代码有几个漏洞,我需要帮助。本质上,它是知道如何让 getCurrentLocation 方法等待计时器。我不能只使用延迟,因为我计划在用户按下按钮或满足位置准确性(在计时器中检查)时强制计时器到期。代码如下:

- (void)timerFireMethod 
    static int elapsedTime = 0;
    elapsedTime++;
    if (elapsedTime >= gpsTimeout) 
        [locationManager stopUpdatingLocation];
        elapsedTime = 0; // reset static variable
        // !!! How do I do the following !!!
        //  do something to allow getCurrentLocation to return
    
    if ((currentLocation.horizontalAccuracy <= gpsDesiredAccuracy) & (currentLocation.verticalAccuracy <= 2*gpsDesiredAccuracy)) 
        [locationManager stopUpdatingLocation];
        elapsedTime = 0; // reset static variable
        //  do something to allow getCurrentLocation to return
    


- (CLLocation *)getCurrentLocation 
    // check if current accuracy is good enough and return if true
    if ((currentLocation.horizontalAccuracy <= gpsDesiredAccuracy) & (currentLocation.verticalAccuracy <= 2*gpsDesiredAccuracy)) 
        [locationManager stopUpdatingLocation];
        return currentLocation;
     else 
        // show alert with count down timer
        UIAlertView *gpsAlertView = [[UIAlertView alloc] initWithTitle:nil message:@"tbd put in timer and list location accuracy updates" delegate:self cancelButtonTitle:@"Continue With Current Accuracy" otherButtonTitles:nil];
        [gpsAlertView show];
        // start timer
        NSTimer *gpsTimer = [NSTimer scheduledTimerWithTimeInterval:1.0
                                                         target:self selector:@selector(timerFireMethod:)
                                                       userInfo:nil repeats:YES];

        // !!! How do I do the following !!!
        // wait for when timer expires,
        // the user to press "Continue With Current Accuracy" button (can force timer to expire?)   
        return currentLocation;
    

【问题讨论】:

【参考方案1】:

等待任何计时器或任何加速度计或用户事件的方法是使用 return 语句简单地将当前方法退出到 UI 运行循环。

等待后你想做的任何事情都可以进入定时器或事件回调方法。

【讨论】:

这似乎是有道理的。我被困在通过与没有 gps 相同的方式将 gps 功能硬塞到我的应用程序中。我会在接下来的一两天内完成这项工作,并报告进展情况。 现已启动并运行。你的建议奏效了。我还在 Apple 的 LocateMe 示例代码中找到了很好的参考。

以上是关于在返回位置之前如何等待计时器?的主要内容,如果未能解决你的问题,请参考以下文章

Jmeter -- 定时器

如何在DispatcherTimer结束之前暂停for循环?

jmeter的定时器

如何要求信号量立即返回而不是等待信号?

Jmeter 脚本增强_思考时间

javaweb,监听器和定时器(Quartz)互相调控的问题