Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 22.12.2011
Сообщений: 224

Написать свой таймер

22.12.2011, 10:27. Показов 2869. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
в программе должны быть использованы: инакапсуляция, наследование и полиморфизм
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.12.2011, 10:27
Ответы с готовыми решениями:

Как написать свой таймер?
Чтобы функция выполнялась скажем каждые 200 миллисекунд. Сейчас WM_TIMER делает это, но он не подходит. Искал по многим запросам в гугле и...

Реализовать свой таймер
Задача реализовать свой таймер в целях обучения, не могу понять в чем ошибка объясните плиз using System; using...

Написать таймер к задаче
Ребят помогите написать таймер к этой задаче: #include <stdio.h> #include <stdlib.h> #include <iostream> #include...

8
 Аватар для sau
2774 / 2074 / 386
Регистрация: 22.07.2011
Сообщений: 7,822
23.12.2011, 21:44
инакапсуляция, наследование и полиморфизм
- еще бы понимать что это значит
0
 Аватар для m0nax
1274 / 975 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
23.12.2011, 21:51
Написать ...
ну так пиши, я не против
нет вопроса - нет ответа
0
 Аватар для n1l
136 / 138 / 18
Регистрация: 26.07.2010
Сообщений: 911
24.12.2011, 00:20
Вопрос наверное звучит так - "И че мне делать?"

Библия c# в помощь.... Там очень все подробно описано и про си шарп и про полиморфизм наследования итд...
В общем книга классная. Так что дерзайте.
0
0 / 0 / 0
Регистрация: 22.12.2011
Сообщений: 224
25.12.2011, 23:17  [ТС]
время поджимает скоро ссесия
0
 Аватар для n1l
136 / 138 / 18
Регистрация: 26.07.2010
Сообщений: 911
26.12.2011, 08:39
Если вы не хотите самостоятельно изучать, но в тоже время получить все "под ключ" идите в раздел фриланс и платите деньги.
Но я бы вам советовал почитать все таки, задачу можно решить за дней 4-5 если потрудится.
0
Автор FAQ
Автор FAQ
 Аватар для Rockedit
1803 / 615 / 37
Регистрация: 22.12.2009
Сообщений: 1,544
26.12.2011, 09:15
http://msdn.microsoft.com/ru-r... spx?ppud=4 вот тут почитайте что умеет класс таймер, от кого он наследуется и т.д. ну и напишите простой аналог. Так же еще есть инструменты, с помощью которых можно посмотреть, как реализован стандартный класс таймер, т.е. его код. Но я к сожалению не помню, может кто подскажет Вам.
1
Злой няш
 Аватар для I2um1
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
26.12.2011, 09:28
Проще наверное свой реализовать. У меня он какой-то страшненький:
Timer
C#
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
using System;
using System.ComponentModel;
using System.Globalization;
using System.Runtime;
using System.Runtime.InteropServices;
using System.Threading;
namespace System.Windows.Forms
{
    [SRDescription("DescriptionTimer"), ToolboxItemFilter("System.Windows.Forms"), DefaultProperty("Interval"), DefaultEvent("Tick")]
    public class Timer : Component
    {
        private class TimerNativeWindow : NativeWindow
        {
            private Timer _owner;
            private int _timerID;
            private static int TimerID = 1;
            private bool _stoppingTimer;
            public bool IsTimerRunning
            {
                get
                {
                    return this._timerID != 0 && base.Handle != IntPtr.Zero;
                }
            }
            ~TimerNativeWindow()
            {
                this.StopTimer();
            }
            public void RestartTimer(int newInterval)
            {
                this.StopTimer(false, IntPtr.Zero);
                this.StartTimer(newInterval);
            }
            public void StartTimer(int interval)
            {
                if (this._timerID == 0 && !this._stoppingTimer && this.EnsureHandle())
                {
                    this._timerID = (int)SafeNativeMethods.SetTimer(new HandleRef(this, base.Handle), Timer.TimerNativeWindow.TimerID++, interval, IntPtr.Zero);
                }
            }
            public void StopTimer()
            {
                this.StopTimer(true, IntPtr.Zero);
            }
            public void StopTimer(bool destroyHwnd, IntPtr hWnd)
            {
                if (hWnd == IntPtr.Zero)
                {
                    hWnd = base.Handle;
                }
                if (this.GetInvokeRequired(hWnd))
                {
                    UnsafeNativeMethods.PostMessage(new HandleRef(this, hWnd), 16, 0, 0);
                    return;
                }
                bool flag = false;
                try
                {
                    Monitor.Enter(this, ref flag);
                    if (!this._stoppingTimer && !(hWnd == IntPtr.Zero) && UnsafeNativeMethods.IsWindow(new HandleRef(this, hWnd)))
                    {
                        if (this._timerID != 0)
                        {
                            try
                            {
                                this._stoppingTimer = true;
                                SafeNativeMethods.KillTimer(new HandleRef(this, hWnd), this._timerID);
                            }
                            finally
                            {
                                this._timerID = 0;
                                this._stoppingTimer = false;
                            }
                        }
                        if (destroyHwnd)
                        {
                            base.DestroyHandle();
                        }
                    }
                }
                finally
                {
                    if (flag)
                    {
                        Monitor.Exit(this);
                    }
                }
            }
            public override void DestroyHandle()
            {
                this.StopTimer(false, IntPtr.Zero);
                base.DestroyHandle();
            }
            protected override void OnThreadException(Exception e)
            {
                Application.OnThreadException(e);
            }
            public override void ReleaseHandle()
            {
                this.StopTimer(false, IntPtr.Zero);
                base.ReleaseHandle();
            }
            protected override void WndProc(ref Message m)
            {
                if (m.Msg == 275)
                {
                    if ((int)((long)m.WParam) == this._timerID)
                    {
                        this._owner.OnTick(EventArgs.Empty);
                        return;
                    }
                }
                else
                {
                    if (m.Msg == 16)
                    {
                        this.StopTimer(true, m.HWnd);
                        return;
                    }
                }
                base.WndProc(ref m);
            }
            internal TimerNativeWindow(Timer owner)
            {
                this._owner = owner;
            }
            private bool EnsureHandle()
            {
                if (base.Handle == IntPtr.Zero)
                {
                    CreateParams createParams = new CreateParams();
                    createParams.Style = 0;
                    createParams.ExStyle = 0;
                    createParams.ClassStyle = 0;
                    createParams.Caption = base.GetType().Name;
                    if (Environment.OSVersion.Platform == PlatformID.Win32NT)
                    {
                        createParams.Parent = (IntPtr)NativeMethods.HWND_MESSAGE;
                    }
                    this.CreateHandle(createParams);
                }
                return base.Handle != IntPtr.Zero;
            }
            private bool GetInvokeRequired(IntPtr hWnd)
            {
                if (hWnd != IntPtr.Zero)
                {
                    int num;
                    int windowThreadProcessId = SafeNativeMethods.GetWindowThreadProcessId(new HandleRef(this, hWnd), out num);
                    int currentThreadId = SafeNativeMethods.GetCurrentThreadId();
                    return windowThreadProcessId != currentThreadId;
                }
                return false;
            }
        }
        private int interval;
        private bool enabled;
        private EventHandler onTimer;
        private GCHandle timerRoot;
        private Timer.TimerNativeWindow timerWindow;
        private object userData;
        private object syncObj = new object();
        [SRDescription("TimerTimerDescr"), SRCategory("CatBehavior")]
        public event EventHandler Tick
        {
            add
            {
                this.onTimer = (EventHandler)Delegate.Combine(this.onTimer, value);
            }
            remove
            {
                this.onTimer = (EventHandler)Delegate.Remove(this.onTimer, value);
            }
        }
        [DefaultValue(null), TypeConverter(typeof(StringConverter)), Localizable(false), SRDescription("ControlTagDescr"), SRCategory("CatData"), Bindable(true)]
        public object Tag
        {
            [TargetedPatchingOptOut("Performance critical to inline this type of method across NGen image boundaries")]
            get
            {
                return this.userData;
            }
            [TargetedPatchingOptOut("Performance critical to inline this type of method across NGen image boundaries")]
            set
            {
                this.userData = value;
            }
        }
        [SRCategory("CatBehavior"), SRDescription("TimerEnabledDescr"), DefaultValue(false)]
        public virtual bool Enabled
        {
            get
            {
                if (this.timerWindow == null)
                {
                    return this.enabled;
                }
                return this.timerWindow.IsTimerRunning;
            }
            set
            {
                lock (this.syncObj)
                {
                    if (this.enabled != value)
                    {
                        this.enabled = value;
                        if (!base.DesignMode)
                        {
                            if (value)
                            {
                                if (this.timerWindow == null)
                                {
                                    this.timerWindow = new Timer.TimerNativeWindow(this);
                                }
                                this.timerRoot = GCHandle.Alloc(this);
                                this.timerWindow.StartTimer(this.interval);
                            }
                            else
                            {
                                if (this.timerWindow != null)
                                {
                                    this.timerWindow.StopTimer();
                                }
                                if (this.timerRoot.IsAllocated)
                                {
                                    this.timerRoot.Free();
                                }
                            }
                        }
                    }
                }
            }
        }
        [SRCategory("CatBehavior"), DefaultValue(100), SRDescription("TimerIntervalDescr")]
        public int Interval
        {
            [TargetedPatchingOptOut("Performance critical to inline this type of method across NGen image boundaries")]
            get
            {
                return this.interval;
            }
            set
            {
                lock (this.syncObj)
                {
                    if (value < 1)
                    {
                        throw new ArgumentOutOfRangeException("Interval", SR.GetString("TimerInvalidInterval", new object[]
                        {
                            value, 
                            0.ToString(CultureInfo.CurrentCulture)
                        }));
                    }
                    if (this.interval != value)
                    {
                        this.interval = value;
                        if (this.Enabled && !base.DesignMode && this.timerWindow != null)
                        {
                            this.timerWindow.RestartTimer(value);
                        }
                    }
                }
            }
        }
        public Timer()
        {
            this.interval = 100;
        }
        public Timer(IContainer container) : this()
        {
            if (container == null)
            {
                throw new ArgumentNullException("container");
            }
            container.Add(this);
        }
        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                if (this.timerWindow != null)
                {
                    this.timerWindow.StopTimer();
                }
                this.Enabled = false;
            }
            this.timerWindow = null;
            base.Dispose(disposing);
        }
        protected virtual void OnTick(EventArgs e)
        {
            if (this.onTimer != null)
            {
                this.onTimer(this, e);
            }
        }
        [TargetedPatchingOptOut("Performance critical to inline this type of method across NGen image boundaries")]
        public void Start()
        {
            this.Enabled = true;
        }
        [TargetedPatchingOptOut("Performance critical to inline this type of method across NGen image boundaries")]
        public void Stop()
        {
            this.Enabled = false;
        }
        public override string ToString()
        {
            string str = base.ToString();
            return str + ", Interval: " + this.Interval.ToString(CultureInfo.CurrentCulture);
        }
    }
}
.
0
 Аватар для sau
2774 / 2074 / 386
Регистрация: 22.07.2011
Сообщений: 7,822
26.12.2011, 13:49
Не совсем понятно что значит "свой" таймер - это может быть банальная обертка над существующими таймерами, в том числе и WinAPi-шными, или же нужно свой драйвер написать ?

Добавлено через 1 минуту
Ну судя по тому что тут задача больше для обучения азам, то можно взять стандартный NET таймер и обернуть его функции своими ) - чем не "свой" таймер ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.12.2011, 13:49
Помогаю со студенческими работами здесь

Как написать точный таймер?
Помогите! подскажите как написать точный таймер, а то у меня то 2 секунды отставания то вперед таймер бежит.

Как правильно написать таймер
Всем доброго времени суток, подскажите начинающему как правильно реализовать таймер, как правильно написать код...

Написать программу «Обратный таймер»
Написать программу «Обратный таймер»: программа должна предложить ввести натуральное число, изобразить на экране электронное табло, на...

Написать свой Shell
Всем доброго времени суток, недавно я получил интересную, но не простую задачу- реализовать свой компактный но рабочий сшел (команды только...

Написать свой манипулятор
Здравствуйте, подскажите пожалуйста, как для класса A, написать свой манипулятор, который вызвал бы функцию класса? Чтобы манипулятор мог...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru