Форум программистов, компьютерный форум CyberForum.ru

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

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

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

19.03.2011, 05:20. Просмотров 1287. Ответов 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); 
}
Компилируется всё нормально. А при запуске второго таймера
выскакивает ошибка. Что я делаю не правильно?
Как надо сделать?
Спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.03.2011, 05:20     Запустить несколько таймеров одновременно
Посмотрите здесь:

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

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

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

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

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

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

2 wav одновременно - C++
доброго времени суток всем. нужно одновременно проигрывать несколько wav файлов.. пробывал audiere, ничего сложного, но при попытке...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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.

Удачи
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 листбокса в ресурсах
*/
pominub
0 / 0 / 0
Регистрация: 17.11.2010
Сообщений: 30
21.03.2011, 00:02  [ТС]     Запустить несколько таймеров одновременно #4
2Kovalsky2

Спасибо. Ясно.
Только добавление строк в ListBox`ы я привёл в качестве примера.
На самом деле программа должна выполнять другие, более сложный вещи.
Как ещё , в принципе можно организовать параллельную независимую
работу нескольких таймеров?
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 ('что-нибудь'), то всё работает.
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.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.03.2011, 00:23     Запустить несколько таймеров одновременно
Еще ссылки по теме:

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

__cplusplus и __STDC__ одновременно? - C++
Константы __cplusplus и __STDC__ вроде как не могут быть определены одновременно, но в Dev-C++, если запустить следующий код: #ifdef...

Можно ли одновременно изучать С и С++? - C++
Дело такое, некоторое время изучал си , а сейчас начали проходить c++, си бросать не хочу, но и 2 языка вытащить тяжело будет. Бросить си и...

Инициализация n функций одновременно - C++
Добрый день, меня интересует, как инициализировать 2 функции одновременно. В моем случае мне нужно, чтобы работала функция реакции на...

Два таймера одновременно - C++
Есть функция таймер: void timer(int s,int m,int h){ cout.fill('0'); while(true){ system("cls"); cout.width(2); ...


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

Или воспользуйтесь поиском по форуму:
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);
Вроде работает...
На данном этапе меня это устраивает.
Если возникнут ещё какие-либо вопросы, обращусь за помощью
Yandex
Объявления
22.03.2011, 00:23     Запустить несколько таймеров одновременно
Ответ Создать тему
Опции темы

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