|
55 / 55 / 6
Регистрация: 07.07.2013
Сообщений: 345
|
|
Как обычную переменную на время сделать константой?14.07.2013, 10:32. Показов 22995. Ответов 66
Метки нет (Все метки)
Как обычную переменную на время сделать константой?
0
|
|
| 14.07.2013, 10:32 | |
|
Ответы с готовыми решениями:
66
Как обычную переменную сделать константой Как из переменной окружения сделать обычную переменную? Цикл в delphi. Сделать переменную константой в цикле |
|
Комп_Оратор)
|
||||||
| 14.07.2013, 13:54 | ||||||
1
|
||||||
|
3 / 3 / 1
Регистрация: 13.07.2013
Сообщений: 71
|
|
| 14.07.2013, 17:53 | |
|
Уважаемый IGPIGP!
А можно ли решить задачу сохранения значения переменной с использование только одной функции main ()? Т.е. без применения функции int foo2()? Как я уже писал, у меня только одна функция и применить две я не могу по условиям использования библиотеки.
0
|
|
|
Комп_Оратор)
|
||
| 14.07.2013, 18:19 | ||
|
То есть, в Вашей же функции и сделайте. Имя подберите на свой вкус, добавьте аргументов по усмотрению, измените тип и возвращаемое значение (в foo2 оно для демонстрации равно a)). Волшебное число 100 можно изменить на INT_MAX или на двойку ( вряд ли найдёте платформу, где int меньше). То есть отнеситесь творчески. Главное идея.
0
|
||
|
3 / 3 / 1
Регистрация: 13.07.2013
Сообщений: 71
|
|
| 14.07.2013, 18:35 | |
|
Пока не понял как буду передавать значение переменной в рамках одной функции, но примусь за создание тренировочной программы.
Спасибо за советы и примеры!
0
|
|
|
Комп_Оратор)
|
||
| 14.07.2013, 18:41 | ||
0
|
||
|
3 / 3 / 1
Регистрация: 13.07.2013
Сообщений: 71
|
|
| 14.07.2013, 19:12 | |
|
Да, вариантов и информации много, поле для деятельности есть.
Если вернуться ко второму примеру, то мне надо "заморозить" значение переменной в функции foo2() и не вызывать ее из функции main(). В моем случае программа - это библиотека для приложения к Windows, из ее главной функции DLLmain функция foo2() напрямую не вызывается. В общем, пока только в общих чертах понимаю, как это сделать в foo2(), не прибегая к main(). Буду тренироваться.
0
|
|
|
3 / 3 / 1
Регистрация: 13.07.2013
Сообщений: 71
|
||||||
| 14.07.2013, 21:04 | ||||||
|
В библиотеке DLL есть стандартный файл dllmain.cpp, который автоматически сформирован при создании проекта:
#include "..\..\inc\gauges.h" в котором все типовые функции и описаны. В том числе и данная функция обратного вызова, о которой идет речь. Мне остается действовать в рамках типовых инструментов приложения с использование соответствующих API функций и отсюда все мои проблемы.
0
|
||||||
|
Комп_Оратор)
|
|||||||
| 14.07.2013, 21:29 | |||||||
|
Попробую воспользовавшись приведенным Вами ранее фрагментом "вслепую", то есть не понимая, где он и как работает. Пусть это фрагмент многократно вызываемой Вами функции:
0
|
|||||||
|
3 / 3 / 1
Регистрация: 13.07.2013
Сообщений: 71
|
||||||||||||||||||||||
| 15.07.2013, 17:10 | ||||||||||||||||||||||
|
Извините, что заставил Вас угадывать, не хотел.
В Вашем коде есть два момента, которые я не использовал в предлагаемом виде. Первый - это блок:
Второй момент - это статичные переменные:
Результат неутешительный - при работе программы они не сохраняют свои значения, а меняют их при всяком обращении к функции на значение time_double, как это написано в программе. Поэтому значение секундомера всегда равно 0. Программа не работает. Я уже пытался использовать static и static const, но "заморозить" значения после первого обращения к функции не получается: - статические значения в 0 или заданные при инициализации значения не устанавливаются при первом обращении к функции, как это написано в книжках, а принимают всякий раз произвольные значения. Например, при установленном значении -1 они принимают значения 7, при втором цикле 19, потом еще чего-нибудь; - при каждом обращении к функции статические переменные принимают новые значения текущего счетчика времени. Собственно задача сводится к замораживанию первого значения переменной static. А оно не замораживается. Мне уже подсказали, что использовать static для замораживания нельзя, нужно использовать для этих целей глобальную переменную. Применил глобальную - тоже не замораживается. Добавлено через 13 минут Постараюсь пояснить работу функции. Есть макрос, таблица переменных которого такова:
Первая строчка - это имя макроса. Вторая - имя первой картинки, которых может быть много. Порядок показа картинок определяет специальный параметр макроса. Строчка CLOCK_SECOND,GTX328_Zastavka_icon_cb, содержит имя переменной, которая генерирует секунды и имя функции обратного вызова, которая срабатывает при обновлении значения секунд. Каждой картинке соответствует свой номер. В функции обратного вызова я читаю текущее значение секунд, присваиваю соответствующий ему номер картинки и возвращаю в макрос. Картинка выводится. Для текущего времени эта задача решается просто и такие часы у меня работают. Для секундомера мне надо знать начальное значение секунд, чтобы затем постоянно его вычитать из текущего значения и получать относительное время. Вот задачу "замораживания" начального времени я и не могу решить. Добавлено через 1 час 25 минут Переделал пример для использования только одной функции - main().
Так что для одной функции этот вариант не подходит.
0
|
||||||||||||||||||||||
|
Комп_Оратор)
|
|
| 15.07.2013, 17:21 | |
|
kotgav, скажу честно, мало что понятно. То есть библиотека получает время самостоятельно, как я понял. Тогда и не нужно пытаться его останавливать. Поставьте вопрос так: -" Что мне нужно остановить во времени?" Если доступ к работе библиотеки у Вас есть только через установку номера картинки, то возвращайте прежний номер всё время пока Вам нужно.
Не взыщите если и это не в тему. ![]() А вообще, лучше бы Вам сформулировать вопрос как-то иначе. Например: работаю в MVS, в проекте MFC, с внешней библиотекой такой-то..., вопрос в следующем... Может кто-то и скажет.
0
|
|
|
3 / 3 / 1
Регистрация: 13.07.2013
Сообщений: 71
|
|
| 15.07.2013, 17:28 | |
|
Можно так сказать, что библиотека получает время самостоятельно из приложения. Точнее значения переменной с частотой 1 герц, т.е. каждую секунду абсолютное значение секунд: 0, 1, 2 и т.д. А я могу включиться в процесс в любой момент времени, например, когда значение этой переменной равно 43. Вот его мне и надо запомнить.
Не останавливать бег переменной, а запомнить то значение, которое было у переменной в момент запуска библиотеки. Похоже, для данного случая, задача не решаемая.
0
|
|
|
Комп_Оратор)
|
||
| 15.07.2013, 17:30 | ||
0
|
||
|
3 / 3 / 1
Регистрация: 13.07.2013
Сообщений: 71
|
|
| 15.07.2013, 17:34 | |
|
А кстати, это идея! Попробую сделать совсем другую функцию и объявить глобальные переменные. При первом обращении к функции обратного вызова вызвать новую функцию и в ней присвоить начальные значения.
Может быть и получится, кто его знает.
0
|
|
|
Комп_Оратор)
|
|||
| 15.07.2013, 17:37 | |||
![]() Добавлено через 1 минуту
0
|
|||
|
3 / 3 / 1
Регистрация: 13.07.2013
Сообщений: 71
|
|
| 15.07.2013, 17:38 | |
|
Напишу, спасибо за помощь!
0
|
|
|
3 / 3 / 1
Регистрация: 13.07.2013
Сообщений: 71
|
|||||||
| 16.07.2013, 17:55 | |||||||
|
Пример наглядный. Принцип сохранения значения в качестве временной константы основан на использовании const в вызываемой функции. А со своей функцией обратного вызова продолжаю работать.
0
|
|||||||
|
Комп_Оратор)
|
||
| 16.07.2013, 18:07 | ||
|
Второй пример с инициализирующим значением (дополнительной статической переменной) лучше подходит. Нет же гарантии, что 0 не получите потом. Это нормальное значение секунд на каждой 61-й секунде предыдущей минуты, другими словами. Успеха!
1
|
||
|
3 / 3 / 1
Регистрация: 13.07.2013
Сообщений: 71
|
||
| 16.07.2013, 18:10 | ||
|
Второй пример тоже изучил, применил у себя. Но пока не присваивается начальное значение, а все время остается этот -1, который был даден ему при инициализации. Разбираюсь.
0
|
||
|
Комп_Оратор)
|
|
| 16.07.2013, 19:06 | |
|
0
|
|
| 16.07.2013, 19:06 | |
|
Как сделать, чтобы "*" принимали как обычную переменную?
из массива в обычную переменную Как сделать обычную кнопку в режиме ключа? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Контроль уникальности строк в табличной части документа
Maks 18.06.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ПланированиеСпецтехники" с табличной частью "НаличиеОборудования", разработанного в КА2.
Задача: контроль уникальности строк в. . .
|
Клиент
Uhbif79 18.06.2026
Здесь простой клиент для работы с сервером.
|
Сервер
Uhbif79 18.06.2026
Выкладываю простейший сервер.
|
Дефенестрация
kumehtar 18.06.2026
Узнал интересное слово. Дефенестрация. Это когда ты выбрасываешь кого-либо или что-либо из окна. Возьму на вооружение)))
|
|
Дихотомия добра и зла
kumehtar 18.06.2026
Как Дзен-буддисты говорят о добре и зле: не нужно воевать против зла, нужно воевать против невежества. Тогда добро станет ествественным, и поэтому вечным. Но дело в том, что невежество всё время. . .
|
Своя Интернет-Компания
iceja 18.06.2026
Я программист с экономическим образованием, пишу свой проект, это SaaS для бизнесов. Мне нужен co-founder с высшим экономическим образованием, и/ или инвестор. Сейчас проект в интенсивной разработке,. . .
|
24 Мат модель здравосохранения: функциональные требования к строительству пищеблока
anaschu 18.06.2026
СРесурсами1: финансовый SD-контур, калькулятор функциональных требований пищеблока
Сегодня разделили затраты в агенте Экономика по образцу модели НАСОСЫ, добавили расчёт ROI и построили первый. . .
|
23. что сделано за последнее время.
anaschu 17.06.2026
• Эталон: Клиника НИИ питания РАМН, Москва — централизованный пищеблок, 225 коек, 180 пациентов
• Git: репозиторий med2, ветка абсентеизм. Рабочий файл: СРесурсами1_v4. alp
• Смежный проект:. . .
|