|
|
|
Таймеры в C++
|
|||
|---|---|---|---|
|
#18+
У меня возникла такая проблемка: пишу я проги на BCB6: там таймер создаётся с помощью VCL... А в консоли - никак. Вот, подскажите мне как создать таймер в C++ с использованием, желательно стандартных библиотек, чтобы туже самую прогу я смог скомпилить под VC и GCC... Очень нужно, пожалуйста помогите... Заранее благодарен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2006, 12:07 |
|
||
|
Таймеры в C++
|
|||
|---|---|---|---|
|
#18+
То есть мне надо чтобы было примерно так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2006, 12:27 |
|
||
|
Таймеры в C++
|
|||
|---|---|---|---|
|
#18+
Если я правильно понимаю - консольное приложение не сможет такой таймер поймать, ибо эти таймеры основаны на сообщении WM_TIMER и требуют наличия у программы цикла обработки сообщений Windows. Например, делают такие извраты: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. А вообще в консольной проге можно использовать timeSetEvent из Multimedia API, но как ни странно он вполне пригоден и для других задач ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2006, 17:26 |
|
||
|
Таймеры в C++
|
|||
|---|---|---|---|
|
#18+
только это конечно никакие не "таймеры C++", а виндовые извраты. Даже не знаю, существуют ли переносимые "таймеры С++", по-моему у него в библиотеках нету такого. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2006, 17:32 |
|
||
|
Таймеры в C++
|
|||
|---|---|---|---|
|
#18+
--null--только это конечно никакие не "таймеры C++", а виндовые извраты. С точки зрения извратов - в качестве таймера можно использовать поток. Так, кстати, я реализовал класс таймера в линухах. потоку по трубам кидают новые и убиваемые таймеры, а он в своем векторе их обрабатывает. Вполне нормальный изврат. Тем более, что не благодарное дело связываеть с SIG_ACTION. Кстати, а ты какой таймер в линухах пользуешь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2006, 18:08 |
|
||
|
Таймеры в C++
|
|||
|---|---|---|---|
|
#18+
про потоки - совершенно согласен. Можно действительно сделать отличный таймер. В линухе - я человек скромный, мне достаточно alarm() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2006, 18:41 |
|
||
|
Таймеры в C++
|
|||
|---|---|---|---|
|
#18+
кcтати, библиотека Burst, которую обещают в стандартные включить - я ее к сожалению не изучил, но вроде там как раз должны быть разные переносимые решения, может быть и таймеры там реализованы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2006, 18:45 |
|
||
|
Таймеры в C++
|
|||
|---|---|---|---|
|
#18+
--null--Если я правильно понимаю - консольное приложение не сможет такой таймер поймать, ибо эти таймеры основаны на сообщении WM_TIMER и требуют наличия у программы цикла обработки сообщений Windows.Неправильно понимаешь. Вот как раз чтобы не нужно было сидеть в цикле обработки сообщений колбеки и придуманы. Для Belevern: А вот ты все правильно понимаешь :) В твоем примере, вместо SetTimer() надо использовать функцию SetWaitableTimer() ее четвертый параметр как раз адрес колбека. Будет работать точно по тому принципу который ты хочешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2006, 18:48 |
|
||
|
Таймеры в C++
|
|||
|---|---|---|---|
|
#18+
White Owl а почему у него не работал таймер SetTimer? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2006, 18:51 |
|
||
|
Таймеры в C++
|
|||
|---|---|---|---|
|
#18+
вроде врубился. SetTimer я правильно понимаю - он действительно на WM_TIMER работает поэтому не пашет в том виде, как привел в примере автор. А SetWaitableTimer создает совершенно другой вид таймеров, представляющий объект ядра NT Timer и поэтому должен хорошо работать и в безоконных приложениях. Действительно, он лучше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2006, 18:58 |
|
||
|
Таймеры в C++
|
|||
|---|---|---|---|
|
#18+
--null--White Owl а почему у него не работал таймер SetTimer?Потому что SetTimer() завязан на WM_TIMER. Читай MSDN: MSDN:SetTimerWhen you specify a TimerProc callback function, the default window procedure calls the callback function when it processes WM_TIMER. Therefore, you need to dispatch messages in the calling thread, even when you use TimerProc instead of processing WM_TIMER. То есть, если используешь SetTimer с колбеком, то это колбек будет вызван внутри DefWindowProc(). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2006, 19:02 |
|
||
|
Таймеры в C++
|
|||
|---|---|---|---|
|
#18+
--null--кcтати, библиотека Burst, которую обещают в стандартные включить - я ее к сожалению не изучил, но вроде там как раз должны быть разные переносимые решения, может быть и таймеры там реализованы? Хотелось бы взглянуть на эту библиотеку. Может ссылку? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2006, 11:13 |
|
||
|
Таймеры в C++
|
|||
|---|---|---|---|
|
#18+
Бибилиотека называется кстати Boost www.boost.org ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2006, 12:15 |
|
||
|
Таймеры в C++
|
|||
|---|---|---|---|
|
#18+
Какой же это таймер? Это просто контейнер для подсчета промежутков времени! Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2006, 12:25 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=33914184&tid=2030690]: |
0ms |
get settings: |
6ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
37ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 202ms |
| total: | 306ms |

| 0 / 0 |
