Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/29: Рейтинг темы: голосов - 29, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 17.11.2010
Сообщений: 33

Таймер в MFC

01.03.2011, 14:08. Показов 6181. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Такая ситуация:
Я хочу читать построчно файл и выводить строки в ListBox
(при нажатии на кнопку).
Но не через одно время(как это предусмотрено в таймере)
А, скажем, первую строку через 5 сек. Вторую через 10
и т д.

Я делаю так:
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 uTime)
{   
   m_List.AddString(str);
   KillTimer(ID_TIMER_1);
}
 
void CMytimeDlg::OnButton1() 
{
    
    File.Open('tim.txt', CFile::modeReadWrite); 
         while(File.ReadString(str)!=FALSE)     
                                    //Здесь мне нада вставить переменную,
            //в которой менялся бы интервал.(5 , 10 и т д)
            //Но пока даже с одним значением не получается
         {
             SetTimer(ID_TIMER_1,1000,NULL);
             CMytimeDlg::RedrawWindow();
           
         }
    File.Close();
}
При запуске стрОки в лист-боксе не появляютя. Почему???
А если допустим вставить AfxMessageBox('ляляля') после SetTimer,
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 uTime)
{   
   m_List.AddString(str);
   KillTimer(ID_TIMER_1);
}
 
void CMytimeDlg::OnButton1() 
{
    
    File.Open('tim.txt', CFile::modeReadWrite); 
         while(File.ReadString(str)!=FALSE)
         //Здесь мне нада вставить реременную,
         //в которой менялся бы интервал.(5 , 10 и т д)
         //Но пока даже с одним значением не получается
         {
             SetTimer(ID_TIMER_1,1000,NULL);
             CMytimeDlg::RedrawWindow();
             AfxMessageBox('ляляля');  ///// ВОТ ЗДЕСЬ////
         }
    File.Close();
}
то они появляются. Только после каждого нажатия на 'OK'.

Что вообще происходит???
Как сделать чтоб всё работало???

Заранее спасибо.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.03.2011, 14:08
Ответы с готовыми решениями:

Таймер должен через время положить файл на БД. [Таймер]
Мне нужен таймер, а я не знаю как его делать именно, чтоб в конкретное время он сохранял информацию в файл. Чтобы он в конкретный период...

Поясните за таймер!) Или таймер на формах наследниках
Доброго. В проге есть основная форма и в процессе работы создается 1-2-3-4-5 форм наследников все одного типа, но вот в чем загвоздка, на...

Из MFC 2012 в MFC 2005
Есть прокт для студии 12, всё хорошо, писал на 8ке в VS 2012 и он отлично работает. Позже понадобилось портировать его для 2005, я это всё...

7
1 / 1 / 2
Регистрация: 05.08.2009
Сообщений: 96
01.03.2011, 16:54
А происходит следующее:

Пока у Вас циклит while(File.ReadString(str)!=FALSE){...}
Никаких виндовских мессаджей не обрабатывается (в том числе WM_TIMER)
Тимер начнёт обрабатываться только после выхода из
void CMytimeDlg::OnButton1(){...}
но к этому времени переменная str уже пустая(Весь файл прочитали) и соответственнон ничего нету.
А когда ставите AfxMessageBox('ляляля');,то while останавливаеться
и прога начинает обрабатывать виндавские мессаги(WM_TIMER).К примеру
если Вы уберёте KillTimer(ID_TIMER_1); в OnTimer(...), то увас будет
добавляться одна и таже строка с периодичностью 1 сек.

Вот в другом Вашем вопросе от 19.12.2004 04:48, если Вы с ним уже
разобрались,то должно всё работать.Немного изменить его под новые
цели и порядок.
Если, что то у Вас не получиться то подскажу.
0
0 / 0 / 0
Регистрация: 17.11.2010
Сообщений: 33
03.03.2011, 10:59  [ТС]
Спасибо. С этим разобрался.
Теперь следующая проблема:

Нужно по истечении времени таймера добавить эту же строку во второй ListBox.
То есть раньше я просто читал строки из файла и выводил их
в список (интервал каждый раз разный), а теперь нужно:

1. Считать строку из файла и записать её в ListBox1
2. Подождать указанное время
3. Записать эту же строку в ListBox2
И так, пока строки в файле не закончатся.

То есть раньше выполнялось одно действие через определённый интервал
(всегда разный), а сейчас нужно выполнить первое действие (прочитать
строку из файла и добавить её в ListBox1, подождать указанный промежуток
времени (тоже всегда разный), и выполнить второе действие (записать эту же
строку в ListBox2). И так в цикле, пока строки не кончатся.

Как это сделать???
Спасибо.
0
1 / 1 / 2
Регистрация: 05.08.2009
Сообщений: 96
03.03.2011, 12:33
Небось всё на таймерах.
Тогда организуй ещё один таймер(тимер2).
В первом таймере считываешь строчку.Затем его убиваешь и включаешь тимер2.В тимере2 добавляешь строку в Лист2 и включаешь тимер1(не забыв убить тимер2).
В OnTimer(UINT uTime) разделяешь их как нибуть так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void CMytimeDlg::OnTimer(UINT uTime)
{
    switch(uTime)//uTime - ID таймера
    {
      case ID_TIMER_1://timer1
        KillTimer(ID_TIMER_1);
        //бла-бла-бла
        //читаем новую строчку(как и было)
        //Add Str in List1
        SetTimer(ID_TIMER_2,2000,NULL)
      break;
      case ID_TIMER_2://timer2
        KillTimer(2); 
        //бла-бла-бла 
        //Add Str in List2
        SetTimer(ID_TIMER_1,5000,NULL)
      break;
      
    }
}
0
4 / 4 / 2
Регистрация: 09.12.2010
Сообщений: 278
03.03.2011, 15:03
а не проще сделать все на одном таймере и какой нить булевой переменной ?
bool x;
если x=false читаем в первый лист бокс
x=true;
......
если x==true читаем во второq листбокс
x=false;
0
1 / 1 / 2
Регистрация: 05.08.2009
Сообщений: 96
03.03.2011, 16:01
С bool тоже вариант.Только если понадобиться еще какая-нибуть задача,то уже не bool нуден а char.И получиться то же самое только в профиль.)
0
0 / 0 / 0
Регистрация: 17.11.2010
Сообщений: 33
04.03.2011, 13:38  [ТС]
Спасибо. Разобрался. Всё работает.
Ещё такой вопрос:
Следующую программу мне предстоит делать тоже с использованием таймеров.
Только там будет ListCtrl и для каждой строки нужно будет делать таймер.
И на двойной клик по итему, нужно будет запускать таймер и тоже что-то выполнять.
Причём количество итемов в списке будет неограничено. Значит и кол-во таймеров тоже.
Можно ли такое будет реализовать с помощью такого таймера. Если нет, то какие средства
ещё существуют в MFC для работы со временем?
Спасибо...
0
0 / 0 / 0
Регистрация: 13.03.2011
Сообщений: 4
13.03.2011, 20:51
Зайди на www.P-Lib.narod.ru, там есть подробное описание работы с таймером и есть чтото похожее на эту функцию.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.03.2011, 20:51
Помогаю со студенческими работами здесь

подключение классов MFC к не MFC
Как подключить MFC Class From ActiveX Control к не MFC проекту? т.е. пишу обычными винапи функциями, а из этого класса нужны функции...

Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll
Здравствуйте. Подключил afx.h, появилась ошибка. Из-за чего? Что делать?

Таймер похожий на таймер в delphi
Добрый всем)В общем хочу создать класс таймера похожий на класс таймера на delphi.Суть в том,что я хочу включать и выключать таймер за счет...

Таймер, вложенный в таймер
Доброго времени суток. Я новичек, С знаю плохо. Сделал небольшой проект на Arduino, но остался последний штрих: нужно таймер вложить в...

Звук и таймер - реализовать классы: "зв. сигал", "таймер" и "секундомер-сигнализатор"
Подскажите пожалуйста, дано задание реализовать классы: "зв. сигал", "таймер" и "секундомер-сигнализатор". Какие библиотеки...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru