С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
pominub
0 / 0 / 0
Регистрация: 17.11.2010
Сообщений: 30
#1

Запустить несколько таймеров одновременно - C++

19.03.2011, 05:20. Просмотров 1336. Ответов 6
Метки нет (Все метки)

Здравствуйте.
Мне надо сделать чтобы несколько таймеров работало одновременно.
Допустим пусть будет два таймера. Один просто добавляет строку в первый ListBox, вругой во второй.
Запускаются они с разных кнопок.
Я делаю так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void CMytimeDlg::OnTimer( UINT nIDEven)
{
    m_List1.Addstring('string1');
}
 
void CMytimeDlg::OnButton1() 
{
    
   SetTimer(ID_TIMER_1, 1500, NULL); 
 }
 
void CALLBACK EXPORT OnTimer1(HWND hWnd, UINT nMsg, UINT nIDEvent, DWORD dwTime)
 
{   
    CMytimeDlg* dlg;
    dlg->m_List2.AddString('string2')
}
void CMytimeDlg::OnButton3() 
{
      SetTimer(ID_TIMER_2,1500,OnTimer1); 
}
Компилируется всё нормально. А при запуске второго таймера
выскакивает ошибка. Что я делаю не правильно?
Как надо сделать?
Спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.03.2011, 05:20
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Запустить несколько таймеров одновременно (C++):

Несколько действий одновременно - C++
Мне нужно чтобы во во время работы программа одновременно делала несколько действий.. Подскажите какую функцию нужно для этого...

Несколько программ одновременно - C++
Здравствуйте, уважаемые форумчане. Вопрос такой. В CODE BLOKS я одновременно могу держать в левом окне несколько проектов программ. ...

Будет ли продуктивно одновременно читать несколько книг по C++ - C++
Снова здравствуйте форумчане у меня возник к вам вопрос можно ли читать одновременно несколько книг по C++ ? И будет ли это полезно? Сейчас...

Перемножить две матрицы, причем запустить подсчет в несколько потоков - C++
Всем привет. Суть задания перемножить две матрицы, причем запустить подсчет в несколько потоков, в разное кол-во, сравнить время выполнения...

Корректная эмуляция таймеров - C++
При написании эмулятора CHIP-8 столкнулся с проблемой: нужно как-то эмулировать два таймера, работающих на скорости 60 герц. Следовательно,...

Нужна информация по созданию таймеров - C++
Народ подскажите в какой книге присутствует информация о таймерах, ну или какую нибудь статейку хорошую

6
DmSK
0 / 0 / 0
Регистрация: 07.03.2011
Сообщений: 13
20.03.2011, 13:53 #2
Ты перепутал определения обработчика тамера в API и в MFC!!!!
это определение в API:
C++
1
void CALLBACK EXPORT OnTimer1(HWND hWnd, UINT nMsg, UINT nIDEvent, DWORD dwTime)
это определение в MFC и оно скорочено так как MFC сам заполняет необходимые поля см. выше:
C++
1
void CMytimeDlg::OnTimer( UINT nIDEven)
Исходя из выше.... есть две функции SetTimer одна реализована в API другая в MFC.

Удачи
0
Kovalsky2
0 / 0 / 0
Регистрация: 05.08.2009
Сообщений: 96
20.03.2011, 17:00 #3
Ошибка выскакивает потому,что
объявленна ссылка:
C++
1
 CMytimeDlg* dlg;
она на данный момент пуска и мозги под CMytimeDlg не зарезервированы,
из-зи этого нелбьзя юзить dlg->m_List2.AddString('string2');

Чтоб работало могу предложить следующее:
Вместо
C++
1
CMytimeDlg* dlg;dlg->m_List2.AddString('string2');
Написать
C++
1
2
3
4
ListBox_AddString(GetDlgItem(hWnd,IDC_LIST1),'string2');
/*
IDC_LIST1 - Id листбокса в ресурсах
*/
0
pominub
0 / 0 / 0
Регистрация: 17.11.2010
Сообщений: 30
21.03.2011, 00:02  [ТС] #4
2Kovalsky2

Спасибо. Ясно.
Только добавление строк в ListBox`ы я привёл в качестве примера.
На самом деле программа должна выполнять другие, более сложный вещи.
Как ещё , в принципе можно организовать параллельную независимую
работу нескольких таймеров?
0
pominub
0 / 0 / 0
Регистрация: 17.11.2010
Сообщений: 30
21.03.2011, 00:13  [ТС] #5
2DmSK

Если в эту функцию(void CALLBACK EXPORT OnTimer1(HWND hWnd, UINT nMsg, UINT nIDEvent, DWORD dwTime)) вставить просто
AfxMessageBox ('что-нибудь'), то всё работает.
0
Kovalsky2
0 / 0 / 0
Регистрация: 05.08.2009
Сообщений: 96
21.03.2011, 15:17 #6
2pominub
Вроде с таймерами всё,две методы разобрали.
Можно еще сделать так чтобы функция
void CALLBACK EXPORT OnTimer1(HWND hWnd, UINT nMsg, UINT nIDEvent, DWORD dwTime)
входила в состав класса CMytimeDlg,затем ещё пару строчек для того чтоб не возиться со
ststic переменными и функциями класса.
Я Вам в декабре отправлял письмо на e-mail про тимеры,тока не помню что я там писал.

Если у Вас действительно более сложные задачи и таймеры не устраивают,а надо параллельно
выполнять вычисления,то может поглядывать в сторону параллельных потоков (CreateThread(...)).

P.S.
Ну,а то что в MFС использовать API функции и методы - ни кто не запрещал.
Всетаки сначала появился API,а потом уже MFC.
0
pominub
0 / 0 / 0
Регистрация: 17.11.2010
Сообщений: 30
22.03.2011, 00:23  [ТС] #7
Спасибо.
С параллельной работой таймеров вроде разобрался. Сделал так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void CMytimeDlg::OnTimer(UINT nIDEvent) 
{ 
    switch(nIDEvent) 
    { 
          case ID_TIMER_1: 
                m_List1.Addstring('string1'); 
                break; 
          case ID_TIMER_2: 
                m_List2.Addstring('string2'); 
                break; 
    } 
} 
 
void CMytimeDlg::OnButton1() 
{ 
    SetTimer(ID_TIMER_1, 1500, NULL); 
} 
 
void CMytimeDlg::OnButton2() 
{ 
    SetTimer(ID_TIMER_2, 1500, NULL); 
}
Ну а поскольку процессы происходят достаточно ресурсоёмкие, то
какждый таймер я 'засунул' в отдельный поток
C++
1
2
3
4
5
6
7
8
unsigned __stdcall potok1(void *p) {}
_beginthreadex( 
       NULL, 
       0, 
       potok1, 
       (void *)this, 
       0, 
       &thd_id);
Вроде работает...
На данном этапе меня это устраивает.
Если возникнут ещё какие-либо вопросы, обращусь за помощью
0
22.03.2011, 00:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.03.2011, 00:23
Привет! Вот еще темы с ответами:

Одновременно несколько циклов или таймеров. - Delphi
Есть прога которая записывает в файл определенные данные по нажатию кнопки. Тоесть если мы нажмем кнопку а то в файл запишет для...

.NET 4.x Создать и запустить одновременно несколько потоков - C#
Всем привет) Необходимо создать несколько потоков и запустить их одновременно (без помощи циклов). Как это сделать? Помогите...

.NET 4.x Как запустить несколько потоков одновременно? - C#
Здравствуйте, не могу решить проблему с объявлением количества потоков, нужно чтобы запускалось сразу (например) 20 потоков. Вот код...

как запустить одновременно и отслеживать несколько процессов? - C#
вот такой например процесс //создаем новый процесс, который будет работать с консолью pr = new Process(); ...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.