|
55 / 55 / 6
Регистрация: 07.07.2013
Сообщений: 345
|
|
Как обычную переменную на время сделать константой?14.07.2013, 10:32. Показов 23064. Ответов 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 | |
|
Как сделать, чтобы "*" принимали как обычную переменную?
из массива в обычную переменную Как сделать обычную кнопку в режиме ключа? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
GitDOS: Когда я решил скрестить MS-DOS, GitHub и Claude
MaGz GoLd 08.07.2026
Привет, Киберфорум! Хочу поделиться своим проектом, который, надеюсь, вас заинтересует. GitDOS — это веб-приложение, которое позволяет запускать DOS в браузере с тремя крутыми фичами: диски живут в. . .
|
Учебный мини "цифровой двойник" = (Сервер = Java + Flask_питон )+(3D = Гугловскаая 4T nvideo + google colab) +( WMS = Odoo на Docker)
anaschu 07.07.2026
Увидел в требованиях к вакансии создателя имитационных моделей связку (REst + Api + WMS + Anylogic + питон + 3D Nvideo), и решил посмотреть, что это такое. Из этого всего я работал более менее. . .
|
Море в объективе
kumehtar 06.07.2026
Хотел написать много проникновенных слов, но передумал.
Оно само - говорит.
Кто слышит тот слышит.
|
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было
ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась.
Первый вариант. . .
|
|
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2.
Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
|
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет.
Но обычно это 50 лет и более.
Наверное, закисление почвы происходит сезонно в средней. . .
|
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
|
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS
Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
|