Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.76/37: Рейтинг темы: голосов - 37, средняя оценка - 4.76
0 / 0 / 0
Регистрация: 20.02.2022
Сообщений: 57

Как вызвать метод из статической функции?

20.02.2022, 22:15. Показов 7782. Ответов 72
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Запускаю таймер:
C++
1
2
3
4
5
6
7
8
9
10
   struct sigaction sa;
   struct itimerval timer;
   memset(&sa, 0, sizeof(sa));
   sa.sa_handler = &StartTimer;
   sigaction(SIGALRM, &sa, NULL);
   timer.it_value.tv_sec = 0;
   timer.it_value.tv_usec = 25000;
   timer.it_interval.tv_sec = 0;
   timer.it_interval.tv_usec = 25000;
   setitimer(ITIMER_REAL, &timer, NULL);
Функция StartTimer может быть статической либо объявлена вне класса. Как из StartTimer мне можно вызвать метод класса?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.02.2022, 22:15
Ответы с готовыми решениями:

Как вызвать метод класса из static функции
Есть класс, 1 из функции которого создает поток на статичную функцию этого же класса, а эта статичная функция вызывает уже не статичную...

Как вызвать переопределить метод из дочернего класса так, чтобы выполнялись еще функции в родительском
У меня структура такова: Интерфейс IKey (Содержит void Open) public interface IKey { public void Open(); } Есть...

Объявление статической переменной и статической функции в классе
Добрый вечер, столкнулся с проблемой и не могу решить. Есть класс SavingsAccount и в нем объявлена статическая переменная для процентной...

72
0 / 0 / 0
Регистрация: 20.02.2022
Сообщений: 57
21.02.2022, 15:58  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от John Prick Посмотреть сообщение
то она у вас объявлена не в классе.
Простите наврал чуток.
Вполне возможно, что объект порта не нужен внутри формы.
Да, логически он там не при делах. Куда тогда его положить? Как контактировать с формой, обмениваться данными?
0
2410 / 1946 / 764
Регистрация: 27.07.2012
Сообщений: 5,582
21.02.2022, 16:25
Цитата Сообщение от Vlad_V9 Посмотреть сообщение
Куда тогда его положить? Как контактировать с формой, обмениваться данными?
Это по-разному можно реализовать, тут уже надо на конкретные обстоятельства смотреть. В форме достаточно было бы указателя на объект порта, а для сообщений о приёме данных от порта - функция-коллбэк в нём.
0
0 / 0 / 0
Регистрация: 20.02.2022
Сообщений: 57
21.02.2022, 19:27  [ТС]
Идея управление и вывод информации от усилителя мощности КВ диапазона. Управление заключается в переключении режимов, ну и выводить на экран порядка 6-8 параметров. Вторая идея которая не дает покоя это написать терминал ком порта.
0
2410 / 1946 / 764
Регистрация: 27.07.2012
Сообщений: 5,582
21.02.2022, 21:24
Цитата Сообщение от Vlad_V9 Посмотреть сообщение
Идея управление и вывод информации от усилителя мощности КВ диапазона. Управление заключается в переключении режимов, ну и выводить на экран порядка 6-8 параметров.
Ну вполне стандартная задача. Здесь ком-порт лучше обернуть в какой-нибудь класс типа Protocol или Device или что-то в этом духе, у которого будут высокоуровневые функции SetMode, GetPower и т.д. Они уже будут непосредственно работать с портом, возможно, запуская доп.потоки, чтобы интерфейс приложения на подвисал на время обмена.
0
0 / 0 / 0
Регистрация: 20.02.2022
Сообщений: 57
21.02.2022, 21:38  [ТС]
Цитата Сообщение от John Prick Посмотреть сообщение
Ну вполне стандартная задача. Здесь ком-порт лучше обернуть в какой-нибудь класс типа Protocol или Device или что-то в этом духе, у которого будут высокоуровневые функции SetMode, GetPower и т.д. Они уже будут непосредственно работать с портом, возможно, запуская доп.потоки, чтобы интерфейс приложения на подвисал на время обмена.
Начал изобретать класс-обертку.
0
2410 / 1946 / 764
Регистрация: 27.07.2012
Сообщений: 5,582
21.02.2022, 21:40
Цитата Сообщение от Vlad_V9 Посмотреть сообщение
Начал изобретать класс-обертку.
Ну телегу впереди лошадей не торопись запрягать. Попробуй сначала на том, что есть, получить более-менее работоспособное приложение.
0
0 / 0 / 0
Регистрация: 20.02.2022
Сообщений: 57
21.02.2022, 22:01  [ТС]
Пока идет создание класса ком порта. Сделаю методы поиска доступных портов, настройку ком порта.
0
0 / 0 / 0
Регистрация: 20.02.2022
Сообщений: 57
24.02.2022, 19:15  [ТС]
Не буду плодить тем, спрошу здесь. Есть функция чтения ком порта которая выполняется по таймеру. Хочу вызвать функцию обработки данных полученных от функции чтения. Если вызвать функцию обработки из функции чтения то функция чтения завершиться после выполнения функции обработки, что не есть хорошо. Функция чтения должна записать принятые данные в буфер и завершиться. Как можно послать сигнал чтобы вызвать функцию обработки, при этом функция чтения должна завершиться и ждать своего вызова по таймеру?
Вижу два пути:
1. Вызывать обработку по таймеру с проверкой флага прихода данных.
2. Потоки.
0
2410 / 1946 / 764
Регистрация: 27.07.2012
Сообщений: 5,582
24.02.2022, 21:38
Цитата Сообщение от Vlad_V9 Посмотреть сообщение
Вижу два пути:
1. Вызывать обработку по таймеру с проверкой флага прихода данных.
2. Потоки.
Опрос по таймеру, мягко говоря, не эффективная штука. Если данных нет - пустая трата времени, а если есть, то будут ситуации, когда их накопится много за время ожидания, и это приведёт к дополнительной сложности при их обработке.

Поэтому лучше всего работать с потоками. Можно завести что-то типа блокирующей очереди, когда поток чтения порта будет читать порт и формировать целые законченные пакеты, а потом отправлять их в эту очередь. Другой же поток будет заблокирован до момента прихода данных в очередь, а затем уже вызывать обработчики пакетов.
0
0 / 0 / 0
Регистрация: 20.02.2022
Сообщений: 57
24.02.2022, 22:02  [ТС]
Я планировал что функция чтения по факту получения данных будет их складывать в буфер и дергать функцию обработки, которая будет проверять пришел ли полный пакет и обрабатывать его. Хотя наверное лучше возложить на функцию чтения формирование пакета. Указывать ей время ожидания, если время вышло и ничего не пришло, формируем пакет.
0
2410 / 1946 / 764
Регистрация: 27.07.2012
Сообщений: 5,582
24.02.2022, 22:08
Цитата Сообщение от Vlad_V9 Посмотреть сообщение
Хотя наверное лучше возложить на функцию чтения формирование пакета. Указывать ей время ожидания, если время вышло и ничего не пришло, формируем пакет.
Это как? Если ничего не пришло, то из чего формировать пакет?

Добавлено через 1 минуту
Но вообще тут же зависит от того, кто в обмене ведущий, а кто ведомый. Если комп ведущий, то вообще нет смысла постоянно мониторить порт, а только на время ожидания ответа.
0
0 / 0 / 0
Регистрация: 20.02.2022
Сообщений: 57
25.02.2022, 12:27  [ТС]
В режиме терминала комп должен постоянно ждать посылку. А если опрашивать кого то то да запросил , подождал пришло хорошо, не пришло нет связи.

Добавлено через 5 часов 29 минут
Интересно, может быть есть какая-то возможность генерировать событие о приеме в ком порт данных от ОС? Что бы не дергаться и не читать постоянно с ком порта.
0
2410 / 1946 / 764
Регистрация: 27.07.2012
Сообщений: 5,582
25.02.2022, 12:37
Цитата Сообщение от Vlad_V9 Посмотреть сообщение
есть какая-то возможность генерировать событие о приеме в ком порт данных от ОС?
А как читаете из порта?
0
0 / 0 / 0
Регистрация: 20.02.2022
Сообщений: 57
25.02.2022, 13:01  [ТС]
По таймеру, таймер операционной системы вызывает функцию чтения
C++
1
int ret=read(m_fd, data, 255);
.
0
2410 / 1946 / 764
Регистрация: 27.07.2012
Сообщений: 5,582
25.02.2022, 13:16
Цитата Сообщение от Vlad_V9 Посмотреть сообщение
вызывает функцию чтения
Но это же какая-то самописная read?
0
0 / 0 / 0
Регистрация: 20.02.2022
Сообщений: 57
25.02.2022, 13:29  [ТС]
Нет

/* Copyright (C) 1991-2018 Free Software Foundation, Inc.
This file is part of the GNU C Library.

The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.

The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */

/*
* POSIX Standard: 2.10 Symbolic Constants <unistd.h>
*/

C++
1
extern ssize_t read (int __fd, void *__buf, size_t __nbytes) __wur;
Linux
Под windows терминалов много, а вот под linux не очень.
0
2410 / 1946 / 764
Регистрация: 27.07.2012
Сообщений: 5,582
25.02.2022, 13:51
Цитата Сообщение от Vlad_V9 Посмотреть сообщение
Нет
А вокруг не должно быть какой-то обвязки? В винде например перед чтением из порта надо дождаться события прихода байта. Как в linux - не знаю.
0
0 / 0 / 0
Регистрация: 20.02.2022
Сообщений: 57
25.02.2022, 14:06  [ТС]
Я не нашел такого решения, поэтому пошел через таймер. Да в виндовс когда-то очень давно делал чтение с ком порта, там настраивалось событие кажется. Очень удобно было. Взвел событие и все не заботишься когда оно придет. Все работало без потоков, в теле программы вся обработка была. Вообще здесь все по другому число стоповых бит либо 1 либо 2 нет 1,5. В паритете тоже меньше вариантов выбора чем в винде. Возможно есть более функциональная библиотека?
0
2410 / 1946 / 764
Регистрация: 27.07.2012
Сообщений: 5,582
25.02.2022, 14:11
Цитата Сообщение от Vlad_V9 Посмотреть сообщение
Возможно есть более функциональная библиотека?
Есть boost::asio::serial_port, но сходу может быть сложно разобраться. И не уверен, что там есть нужный функционал.
0
0 / 0 / 0
Регистрация: 20.02.2022
Сообщений: 57
25.02.2022, 15:03  [ТС]
Видел эту штуку. Думаю пока не потяну, пойду пока более простым путем.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.02.2022, 15:03

Как вызвать метод info в метод Main и с какими параметрами?
я новичок в C#, так что не судите строго.. Я не думаю что это кому-то покажется сложным, но у меня вызывает дикий ступор(( using...

Метод main и как им вызвать другой метод
Доброго всем времени суток. У меня возникла проблема. Вобщем дело такое. У меня есть тестовый класс Test, в котором существует 4 метода:...

Шаблоны: определить класс в функции и вызвать его метод
Здравствуйте форумчане. Есть два класса: class WSelectionBox { public: WSelectionBox() = default; ...

Как мне вызвать переменную находящуюся в функции Thread3() из функции main(), находящейся в функции Thread2()
Вот код: from DataBase_0_2_0 import * import json import pyttsx3 import os import sys import speech_recognition as sr ...

Как присвоить адрес статической typedefined функции?
Дано: class NCodeHook { //.. template &lt;typename ArchT&gt; template &lt;typename U&gt; U NCodeHook&lt;ArchT&gt;::createHook(U...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru