Дата  Запланированые курсы
24.09 Maya (профессиональный курс)
24.09 MOC-20741B. Сетевая инфраструктура на основе Windows Server 2016
24.09 DEV-J30. Программирование на платформе Java. Разработка многоуровневых приложений
25.09 DEV-PY100. Основы процедурного программирования на языке Python
25.09 DEV-PY-MP. Модульная программа "Разработчик прикладного программного обеспечения (Язык Python)"
01.10 Компьютерное проектирование в системе AutoCAD (профессиональный курс)
01.10 Профессиональная верстка сайтов. HTML5 и CSS3
01.10 Компьютерное проектирование в системе AutoCAD (базовый курс)
01.10 MOC-20762. Разработка баз данных SQL
01.10 DEV-С-CP+. Расширенная комплексная программа «Разработчик прикладного программного обеспечения (Языки С и C++)»
01.10 DEV-C10. Процедурное программирование. Языки С/C++
01.10 Основы алгоритмизации и программирования (Группа I)
01.10 Основы алгоритмизации и программирования (Группа II)
02.10 DEV-J-MP+. Расширенная комплексная программа "Разработчик прикладного программного обеспечения (Язык Java)"
02.10 DEV-J10. Программирование на платформе Java. Введение в язык Java
02.10 DEV-J-MP+. Расширенная комплексная программа "Разработчик прикладного программного обеспечения (Язык Java)"
02.10 DEV-J10. Программирование на платформе Java. Введение в язык Java
08.10 MOC-20764. Администрирование инфраструктуры баз данных SQL
08.10 MOC-20742B. Инфраструктура идентификации на основе Windows Server 2016
08.10 DEV-J60. Технологии разработки корпоративных приложений на платформе Java Enterprise Edition (Java EE)
08.10 Введение в тестирование программного обеспечения
15.10 DEV-OCPJP. Подготовка к сдаче сертификационных экзаменов серии Oracle Certified Professional Java Programmer
15.10 Компьютерное проектирование в системе AutoCAD (профессиональный курс)
15.10 Трёхмерное моделирование. 3ds Max
15.10 Работа в MS Excel. Базовый уровень
16.10 DEV-PY101. Базовые алгоритмы и структуры данных на языке Python
17.10 Инструменты бизнес-анализа Microsoft Excel: PowerPivot, PowerView
22.10 MOC-10987. Настройка производительности и оптимизация баз данных SQL
22.10 Введение в тестирование программного обеспечения
22.10 MOC-20744A. Безопасность инфраструктуры средствами Windows Server 2016
22.10 Средства векторной графики. Adobe Illustrator
22.10 Основы создания веб-сайтов. Adobe Dreamweaver
22.10 Работа в MS Excel. Расширенные возможности
24.10 NET-DLINKSW-LAB. Технологии коммутации современных сетей Ethernet. Лабораторный практикум
25.10 DEV-J20. Программирование на платформе Java. Стандартные пакеты
25.10 DEV-J20. Программирование на платформе Java. Стандартные пакеты
29.10 MOC-10961B. Автоматизация администрирования с Windows PowerShell
29.10 Автоматизация работы в Excel 2010 с использованием макросов VBA
07.11 DEV-C20. Объектно-ориентированное программирование. Базовый уровень. Язык С++
12.11 Компьютерное проектирование в системе AutoCAD (базовый курс)
12.11 Профессиональная верстка сайтов. HTML5 и CSS3
13.11 DEV-PY110. Процедурное программирование на языке Python (расширенный курс)
19.11 DEV-J30. Программирование на платформе Java. Разработка многоуровневых приложений
19.11 DEV-J30. Программирование на платформе Java. Разработка многоуровневых приложений
26.11 Средства растровой графики. Adobe Photoshop
26.11 Поисковая оптимизация (SEO)
03.12 Компьютерное проектирование в системе AutoCAD (базовый курс)
03.12 DEV-C21. Объектно-ориентированное программирование. Углубленное изучение. Язык С++
07.12 DEV-PY200. Объектно-ориентированное программирование на языке Python
10.12 Основы создания веб-сайтов. Adobe Dreamweaver
10.12 Средства векторной графики. Adobe Illustrator
10.12 Поисковая оптимизация (SEO) для профессионалов
17.12 Компьютерное проектирование в системе AutoCAD (профессиональный курс)
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
04.02 DEV-QT10. Прикладное программирование на С++ с использованием Qt. Базовый уровень
11.02 DEV-J60. Технологии разработки корпоративных приложений на платформе Java Enterprise Edition (Java EE)
11.02 DEV-J60. Технологии разработки корпоративных приложений на платформе Java Enterprise Edition (Java EE)
11.03 Введение в тестирование программного обеспечения
11.03 Введение в тестирование программного обеспечения
11.03 Введение в тестирование программного обеспечения
Открыт набор на осенний семестр в Академию информатики для школьников Открыт набор на осенний семестр на программы второго высшего образования
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

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 постах
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 (2)
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.