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
с.
Да, вы можете сделать его недействительным. И создайте его снова.
Вы также можете использовать:
- (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.
Сделайте таймер недействительным и создайте его заново. Однако убедитесь, что вы не аннулируете и не освобождаете таймер, если вы не уверены, что это необходимо, поскольку цикл выполнения сохраняет таймеры до тех пор, пока они не станут недействительными, а затем освобождает их сам.
Да, аннулирование и воссоздание таймера будет работать. По сути, это то, что вы хотите сделать, если не увеличиваете свое значение: сбросьте настройки и начните заново.