Задержка C#

Просто добавьте . к регулярному выражению

var patt1=/\.[0-9a-z]+$/i;

Поскольку точка - это специальный символ в регулярном выражении, вам нужно экранировать ее, чтобы буквально соответствовать ей: \..

Теперь ваш шаблон будет соответствовать любой строке, которая заканчивается точкой, за которой следует хотя бы один символ из [0-9a-z].

Пример:

[
  "foobar.a",
  "foobar.txt",
  "foobar.foobar1234"
].forEach( t => 
  console.log(
    t.match(/\.[0-9a-z]+$/i)[0]
  ) 
)

, если вы хотите ограничить расширение также определенным количеством символов, чем вам нужно заменить, то +

var patt1=/\.[0-9a-z]{1,5}$/i;

позволят по крайней мере 1 и максимум 5 символов после точки.

6
задан Siddiqui 1 December 2010 в 07:27
поделиться

4 ответа

Нет. Цитируя Уилла Дина из 85122

, вы не можете осмысленно «спать» (т.е. отказываться от запланированного CPU) в течение таких коротких периодов времени. Если вы хотите задержаться на какое-то короткое время, вам нужно вращаться, неоднократно проверяя таймер с подходящим высоким разрешением (например, «таймер производительности») и надеясь, что что-то с высоким приоритетом все равно вас не упустит.

17
ответ дан 8 December 2019 в 03:28
поделиться

Во-первых, точность сна неточна до миллисекунды. Я думаю, что это разрешение зависит от оборудования, и наименьшее время, в течение которого вы можете спать, обычно составляет около 20 мс. Это связано с тем, что Sleep фактически высвобождает то, что может остаться от кванта времени текущего потока; и позволяет запустить другой поток. Когда ваша цепочка снова сможет запускаться, после прохождения одного кванта времени планировщика потоков. Следовательно, разрешение составляет около 20 мс (при условии, что интервал времени в вашей системе составляет 20 мс).

Поскольку Windows не является ОС реального времени; Спящий режим и другие функции ожидания никогда не могут быть полностью детерминированными.

В зависимости от вашего приложения, вы могли бы большую часть времени выполнять спящий режим, а затем выполнять ожидание занятости, когда время имеет решающее значение. Или перепишите структуру так, чтобы вы точно измеряли прошедшее время (используйте System.Diagnostics.Stopwatch); но не зависят от возможности спать в течение определенного периода времени в миллисекундном диапазоне.

Первый ответ в этой ветке MSDN также очень хорошо объясняет это.

Спящий режим и другие функции ожидания никогда не могут быть полностью детерминированными.

В зависимости от вашего приложения, вы могли бы большую часть времени выполнять спящий режим, а затем выполнять ожидание занятости, когда время имеет решающее значение. Или перепишите структуру так, чтобы вы точно измеряли прошедшее время (используйте System.Diagnostics.Stopwatch); но не зависят от возможности спать в течение определенного периода времени в миллисекундном диапазоне.

Первый ответ в этой ветке MSDN также очень хорошо объясняет это.

Спящий режим и другие функции ожидания никогда не могут быть полностью детерминированными.

В зависимости от вашего приложения, вы могли бы большую часть времени выполнять спящий режим, а затем выполнять ожидание занятости, когда время имеет решающее значение. Или перепишите структуру так, чтобы вы точно измеряли прошедшее время (используйте System.Diagnostics.Stopwatch); но не зависят от возможности спать в течение определенного периода времени в миллисекундном диапазоне.

Первый ответ в этой ветке MSDN также очень хорошо объясняет это.

10
ответ дан 8 December 2019 в 03:28
поделиться

Наилучшая степень детализации, которую вы найдете для Thread.Sleep, - это использование класса TimeSpan. К сожалению, наименьшая степень детализации, которую он поддерживает, составляет миллисекунды. Невозможно заснуть в диапазоне микросекунд.

1
ответ дан 8 December 2019 в 03:28
поделиться

I had to write a music program where the notes had to start/stop at the correct duration, precisely, so I used the high-resolution timer in DirectX to do this, but, my application would also stay on top and hog the cpu, so it could keep checking for when to do the next action.

Since there is no way to know exactly when the OS will return control to your application, Thread.Sleep will be a very bad choice, and, as was mentioned, the smallest time increment can vary between 10 and 50ms, in my experience.

1
ответ дан 8 December 2019 в 03:28
поделиться