| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > Периодический вызов ф-ии |
| Автор: Ruslan_ 31.10.2006, 17:27 |
| Можно ли на платформе .NET реализовать выполнение вызова функции через каждые 10 миллисекунд? System.Timers.Timer разочаровал... |
| Автор: mr.DUDA 31.10.2006, 17:35 |
| Пожалуйста, делаем бесконечный цикл и в нём делаем что надо, через заданную задержку (Thread.Sleep). Если в это время нужно ещё что-то выполнять, то пускаем цикл в отдельном потоке. Если нужен пример - будет пример. |
| Автор: Ruslan_ 31.10.2006, 17:38 |
| ОК, спасибо! Можно пример? |
| Автор: stab 31.10.2006, 17:38 |
| mr.DUDA, думаешь на Thread.Sleep'е 10 миллисекунд реально? там квант около 20, вроде.. |
| Автор: stab 31.10.2006, 18:01 | ||||
у меня это выводит:
т.е. квант 15.625 миллисекунд Добавлено @ 18:03 .. хотя, может AppendText долго работает. |
| Автор: mr.DUDA 31.10.2006, 18:11 |
Сие действительно странно - даже на простейшие операции типа инкремент идёт большой расход времени... |
| Автор: stab 31.10.2006, 18:12 |
| .. хотя не, вру, AppendText не считается же. |
| Автор: Ruslan_ 31.10.2006, 18:13 | ||||
Я для проверки переписал так:
К удивлению получил следующее.
Как так может быть? Без комментариев |
| Автор: stab 31.10.2006, 18:15 | ||||
и так тоже 15.625 Добавлено @ 18:19
а так нули. всё-таки квант реально 15 с мелочью миллисекунд. |
| Автор: mr.DUDA 31.10.2006, 18:27 |
| З.Ы. выставление у процесса и потока максимального приоритета не спасает |
| Автор: Ruslan_ 31.10.2006, 18:27 |
| С .NET все ясно. Может кто-то посоветует, как решить эту задачу? Что если попробовать в VS 6.0 класс Timer? Добавлено @ 18:29 т.е. идея кроссплатформенности исчезает... Делать привязку к Win API? - ОК Спасибо. |
| Автор: stab 31.10.2006, 18:30 |
смотри в msdn про multimedia timers, незнаю можно ли их к .net прикрутить.. |
| Автор: Дрон 31.10.2006, 19:12 | ||||
Ты меня удивляешь... Это же всегда так было -- GetTickCount в винапи имеет точность порядка 16мс. Я не совсем понимаю природу этого явления. Но так устроена винда. Хочется точности -- вызывайте винапишное QueryPerformanceCounter / QueryPerformanceFrequency. Вот тогда уж действительно раздолье Добавлено @ 19:21
А так, только и остаётся в цикле проверять -- не прошли ли те самые 10 мс. |
| Автор: Void 31.10.2006, 20:08 | ||||
Дрон, если я не ошибаюсь, System.Diagnostics.Stopwatch именно эти функции и использует.
Вполне. Вот только что соорудил простенькую обёртку. Интервал в 10 мс работает нормально.
|
| Автор: Ruslan_ 6.11.2006, 13:13 |
| Спасибо, Void. |