Дата  Запланированые курсы
24.11 Linux-MP. Модульная программа «Архитектура и администрирование Linux»
24.11 Linux-LE. Основы архитектуры и администрирования Linux
26.11 Поисковая оптимизация (SEO)
26.11 Средства растровой графики. Adobe Photoshop
26.11 Управление проектами (MS Project)
27.11 DEV-J30. Программирование на платформе Java. Разработка многоуровневых приложений (Группа II)
27.11 DEV-J30. Программирование на платформе Java. Разработка многоуровневых приложений (Группа I)
28.11 CORTEX-M-MP. Введение в технологии разработки систем управления на базе МК с RISC ядром ARM Cortex-M
28.11 CORTEX-M-INTRO. Введение в современную микроконтроллерную технику
03.12 Трёхмерное моделирование. 3ds Max
03.12 Компьютерное проектирование в системе AutoCAD (базовый курс)
03.12 DEV-C21. Объектно-ориентированное программирование. Углубленное изучение. Язык С++
07.12 DEV-PY200. Объектно-ориентированное программирование на языке Python
10.12 Основы создания веб-сайтов. Adobe Dreamweaver
10.12 Поисковая оптимизация (SEO) для профессионалов
10.12 Средства векторной графики. Adobe Illustrator
12.12 Инструменты бизнес-анализа Microsoft Excel: PowerPivot, PowerView
12.12 CORTEX-M-RISC. RISC-архитектура ARM Cortex-M в микроконтроллерах
17.12 MOC-20762. Разработка баз данных SQL
17.12 Работа в MS Excel. Расширенные возможности
17.12 Компьютерное проектирование в системе AutoCAD (профессиональный курс)
17.12 Adobe After Effects. Создание анимации и эффектов
09.01 DEV-C22. Стандарт С++11, С++14, С++17 для прикладного программирования
14.01 DEV-OCPJP. Подготовка к сдаче сертификационных экзаменов серии Oracle Certified Professional Java Programmer
14.01 DEV-OCPJP. Подготовка к сдаче сертификационных экзаменов серии Oracle Certified Professional Java Programmer
16.01 CORTEX-M-STM32F. Семейство МК компании ST Microelectronics STM32Fxxx с вычислительным ядром ARM Cortex M3
19.01 Linux-LF. Расширенное администрирование ОС Linux
04.02 DEV-QT10. Прикладное программирование на С++ с использованием Qt. Базовый уровень
11.02 DEV-J60. Технологии разработки корпоративных приложений на платформе Java Enterprise Edition (Java EE)
11.02 DEV-J60. Технологии разработки корпоративных приложений на платформе Java Enterprise Edition (Java EE)
13.02 CORTEX-M-RTOS. Разработка управляющих программ для МК систем управления с использованием многозадачных ОС реального времени
11.03 Введение в тестирование программного обеспечения
11.03 Введение в тестирование программного обеспечения
11.03 Введение в тестирование программного обеспечения
20.03 NET-DLINKSW-LAB. Технологии коммутации современных сетей Ethernet. Лабораторный практикум
Открыт набор на осенний семестр в Академию информатики для школьников Открыт набор на осенний семестр на программы второго высшего образования
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Простая консольная аппликацыя
Zem
#1 Оставлено : 18 декабря 2008 г. 2:59:53(UTC)
Ранг: Активный Участник

Группы: Зарегистрированные пользователи
Зарегистрирован: 23.08.2008(UTC)
Сообщений: 52
Баллов: 156
Мужчина

Сказал «Спасибо»: 4 раз
Код:
#include <windows.h>
#include <stdio.h>

int CALLBACK tick(){printf("tick\n");return 0;}

int main(int argc, char *argv[])
{        
    SetTimer(NULL, 0, 1000, (TIMERPROC)tick);
    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return 0;
}
<font face="Arial"><font size="2"><b>Никак не могу разобратся в последовательности происходящего в этой програмке. Каким образом зацикливается tick(), если SetTimer() не входит ни в один цыкл???</b></font id="size2"></font id="Arial">
Реклама
Alexander.Kudakov
#2 Оставлено : 18 декабря 2008 г. 13:57:01(UTC)
Ранг: Администратор

Группы: Администраторы, Модераторы, Зарегистрированные пользователи
Зарегистрирован: 15.12.2002(UTC)
Сообщений: 2,418
Баллов: 7,303
Откуда: Russia Санкт-Петербург

Поблагодарили: 4 раз в 4 постах
да что вы говорите?! а WM_TIMER сообщение не приходит??
Zem
#3 Оставлено : 18 декабря 2008 г. 21:15:09(UTC)
Ранг: Активный Участник

Группы: Зарегистрированные пользователи
Зарегистрирован: 23.08.2008(UTC)
Сообщений: 52
Баллов: 156
Мужчина

Сказал «Спасибо»: 4 раз
<blockquote id="quote"><font size="1" face="Verdana, Helvetica, Arial" id="quote">quote:<hr height="1" noshade id="quote"><i>Originally posted by Alexander.Kudakov</i>
<br />да что вы говорите?! а WM_TIMER сообщение не приходит??
<hr height="1" noshade id="quote"></blockquote id="quote"></font id="quote"><font face="Arial"><font size="4"><b>А куда? Что является его обработчиком? Это ж не оконная аппликацыя, а tick() не оконная процедура и как обработчик она ни в каких таблицах сообщений не определена.

Ну, предположим что так как tick() указана в SetTimer то именно она является обработчиком.

Таким образом получается следующая картина:

Выполнение функции начинается с main(). Запускается SetTimer() через секунду tick().
Дальше выделяется память под msg (MSG msg;) и начинает выполнятся цыкл обработки сообщений.
В последствии так как оконной процедуры с, даже, минимальным свичём нет, а единственным обработчиком получается tick(), то все сообщения дружно идут к нему но только на WM_TIMER он реагирует. А SetTimer(), видимо, запускает отдельный поток или процесс чтоб он каждую секунду посылал WM_TIMER.

Ещё версии есть???</b></font id="size4"></font id="Arial">

Alexander.Kudakov
#4 Оставлено : 18 декабря 2008 г. 22:33:44(UTC)
Ранг: Администратор

Группы: Администраторы, Модераторы, Зарегистрированные пользователи
Зарегистрирован: 15.12.2002(UTC)
Сообщений: 2,418
Баллов: 7,303
Откуда: Russia Санкт-Петербург

Поблагодарили: 4 раз в 4 постах
не нужно писать такими крупными буковками...
потрудитесь справку почитать msdn.microsoft.com/en-us/library/ms644901(VS.85).aspx
там и пример есть..
Zem
#5 Оставлено : 19 декабря 2008 г. 4:21:37(UTC)
Ранг: Активный Участник

Группы: Зарегистрированные пользователи
Зарегистрирован: 23.08.2008(UTC)
Сообщений: 52
Баллов: 156
Мужчина

Сказал «Спасибо»: 4 раз
<font face="Arial"><font size="3"><b>Прочитал от корки до корки (про таймер), но полное понимание происходящего в моём простеньком примере не наступило...</b></font id="size3"></font id="Arial">
<blockquote id="quote"><font size="1" face="Verdana, Helvetica, Arial" id="quote">quote:<hr height="1" noshade id="quote">Remarks

You can process the message by providing a WM_TIMER case in the window procedure. <u>Otherwise</u>, DispatchMessage will call <font color="red">the TimerProc callback function</font id="red"> specified in the call to the SetTimer function used to install the timer.
<hr height="1" noshade id="quote"></blockquote id="quote"></font id="quote"> <font face="Arial"><font size="3"><b>Тоесть the TimerProc callback function и есть <font color="red">tick</font id="red">(). Я правильно понял? И весь этот цыкл обработки сообщений нужен только чтоб включённый где-то таймер мог запустить функцыю tick()? Но как tick() может принять от DispatchMessage() сообщение если она определена мной и не является оконной процедурой, которая обычно имеет переменные (HWND, UINT, WPARAM, LPARAM) в которые и принимает сообщение.</b></font id="size3"></font id="Arial">
<blockquote id="quote"><font size="1" face="Verdana, Helvetica, Arial" id="quote">quote:<hr height="1" noshade id="quote"> не нужно писать такими крупными буковками...
<hr height="1" noshade id="quote"></blockquote id="quote"></font id="quote"> <font face="Arial"><font size="3"><b>Извините, я хотел чтоб было удобней читать и видимо не учёл что это именно мой монитор настолько приуменьшает ваш шрифт что его невозможно читать без слёз. Прийдётся поменять своё разрешение :(

А таймеры мне нужны чтоб каждые N секунд отправлять пинг на сервер, а с потоками очень не хочется связыватся. Но вот возникла проблемма - recv() когда данные от сервера не идут задерживает выполнение программы более чем на 30 секунд и пинг уже поздно посылать...:(</b></font id="size3"></font id="Arial">
Alexander.Kudakov
#6 Оставлено : 19 декабря 2008 г. 14:57:15(UTC)
Ранг: Администратор

Группы: Администраторы, Модераторы, Зарегистрированные пользователи
Зарегистрирован: 15.12.2002(UTC)
Сообщений: 2,418
Баллов: 7,303
Откуда: Russia Санкт-Петербург

Поблагодарили: 4 раз в 4 постах
www.etcs.ipfw.edu/~lin/EET382_CS460/Lectures/TimersBasics.htm
Zem
#7 Оставлено : 19 декабря 2008 г. 16:25:43(UTC)
Ранг: Активный Участник

Группы: Зарегистрированные пользователи
Зарегистрирован: 23.08.2008(UTC)
Сообщений: 52
Баллов: 156
Мужчина

Сказал «Спасибо»: 4 раз
<font face="Arial"><font size="3"><b>Очень благодарен за полезные ссылки и труд приложеный для их отыскания, спасибо.</b></font id="size3"></font id="Arial">
Dimitry.Ketov
#8 Оставлено : 19 декабря 2008 г. 16:45:34(UTC)
Ранг: Активный Участник

Группы: Зарегистрированные пользователи
Зарегистрирован: 01.12.2002(UTC)
Сообщений: 3,382
Баллов: 10,146
Откуда: Russia Санкт-Петербург

У вас плохое зрение, извините на <font size="6">нескромный</font id="size6"> вопрос?
Zem
#9 Оставлено : 20 декабря 2008 г. 1:50:07(UTC)
Ранг: Активный Участник

Группы: Зарегистрированные пользователи
Зарегистрирован: 23.08.2008(UTC)
Сообщений: 52
Баллов: 156
Мужчина

Сказал «Спасибо»: 4 раз
<font face="Arial"><font size="2"><b><i>Dimitry.Ketov</i>, Ещё не плохое но чем больше работаю с компьютером тем хуже. Наверное Вы намекаете чтоб я не использовал шрифты но зачем же разработчики форума включили такую возможность?</b></font id="size2"></font id="Arial">
Dimitry.Ketov
#10 Оставлено : 22 декабря 2008 г. 14:08:40(UTC)
Ранг: Активный Участник

Группы: Зарегистрированные пользователи
Зарегистрирован: 01.12.2002(UTC)
Сообщений: 3,382
Баллов: 10,146
Откуда: Russia Санкт-Петербург

<blockquote id="quote"><font size="1" face="Verdana, Helvetica, Arial" id="quote">quote:<hr height="1" noshade id="quote"><i>Originally posted by Zem</i>
<br /><font face="Arial"><font size="2"><b><i>Dimitry.Ketov</i>, Ещё не плохое но чем больше работаю с компьютером тем хуже. Наверное Вы намекаете чтоб я не использовал шрифты но зачем же разработчики форума включили такую возможность?</b></font id="size2"></font id="Arial">
<hr height="1" noshade id="quote"></blockquote id="quote"></font id="quote">

Ну да, топором старушек убивать нельзя, зачем же разработчики топора включили такую возможность?
Zem
#11 Оставлено : 5 января 2009 г. 2:22:40(UTC)
Ранг: Активный Участник

Группы: Зарегистрированные пользователи
Зарегистрирован: 23.08.2008(UTC)
Сообщений: 52
Баллов: 156
Мужчина

Сказал «Спасибо»: 4 раз
Однако! Убедили, больше к шрифтам не притронусь, обещаю.
aleavd
#12 Оставлено : 28 июля 2010 г. 21:43:12(UTC)
Ранг: Новичок

Группы: Зарегистрированные пользователи
Зарегистрирован: 28.07.2010(UTC)
Сообщений: 1
Баллов: 3

Программа "зацикливается" потому что таймер срабатывает каждую секунду. Нужно удалить таймер если хотите чтобы он сработал только один раз.

int main(int argc, char *argv[])
{
UINT_PTR up = SetTimer(NULL, 0, 1000, (TIMERPROC)tick);
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
if ( msg.message == WM_TIMER )
{
KillTimer(NULL, up); // удаляем таймер
break; // выходим из цикла обработки сообщений
}
}

return 0;
}
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.