Сбросьте увольнение NSTIMER времени, чтобы быть с этого времени вместо последнего огня

Ryan P записал:

В этом случае файл на самом деле разблокирован в течение короткого периода времени, в то время как файл вновь открыт.

, Таким образом, don’t делают это. Вместо этого open файл для чтения-записи:

open my $fh, '+<', 'test.dat'
    or die "Couldn’t open test.dat: $!\n";

, Когда Вы готовы записать счетчик, всего seek назад к запуску файла. Обратите внимание, что, если Вы делаете это, Вы должны truncate незадолго до close, так, чтобы файл isn’t уехал с запаздывающим мусором, если его новое содержание короче, чем его предыдущие. (Обычно, текущая позиция в файле в его конце, таким образом, можно просто записать truncate $fh, tell $fh.)

кроме того, обратите внимание, что я использовал с тремя аргументами open и лексический дескриптор файла, и я также проверил успех операции. Избегайте глобальных дескрипторов файлов (глобальные переменные плохи, mmkay?) и волшебство, с двумя аргументами open (который был источником многих (n годный для использования) ошибка в коде Perl), и всегда, тестируют, успешно выполняются ли Ваш open с.

8
задан Josh Caswell 27 February 2013 в 01:43
поделиться

3 ответа

Да, вы можете сделать его недействительным. И создайте его снова.

Вы также можете использовать:

- (void) myTimedTask {
    // other stuff this task needs to do

    // change the variable varyingDelay to be 1s or 3s or...  This can be an instance variable or global that is changed by other parts of your app
    // weStillWantTimer is also a similar variable that your app uses to stop this recurring task

if (weStillWantTimer)
       [self performSelector:@selector(myTimedTask:) withObject:gameColor afterDelay:varyingDelay];

 }

Вы вызываете myTimedTask для запуска повторяющейся задачи. После запуска вы можете изменить задержку с помощью переменнойDelay или остановить ее с помощью weStillWantTimer.

7
ответ дан 5 December 2019 в 12:10
поделиться

Сделайте таймер недействительным и создайте его заново. Однако убедитесь, что вы не аннулируете и не освобождаете таймер, если вы не уверены, что это необходимо, поскольку цикл выполнения сохраняет таймеры до тех пор, пока они не станут недействительными, а затем освобождает их сам.

1
ответ дан 5 December 2019 в 12:10
поделиться

Да, аннулирование и воссоздание таймера будет работать. По сути, это то, что вы хотите сделать, если не увеличиваете свое значение: сбросьте настройки и начните заново.

1
ответ дан 5 December 2019 в 12:10
поделиться