Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 29.09.2022
Сообщений: 12

Как остановить функцию if, если внутри нее функция не выдает true/false в течение 16 секунд

09.11.2022, 09:42. Показов 646. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, мне необходимо решить задачу с подключением по Bluetooth моего устройства.

Дело в том, что при соединении устройства с компьютером он определяет 2 COM порта, с одного из которых можно считать информацию, а с другого нет. У меня это COM4 (считываемый) и COM3 (не считываемый). Причем, если считывать с COM3, то происходит зависание программы и ответа никакого. Считывание происходит следующим образом, если функция, подключенной библиотеки (библиотека написана на C++ разработчиком ПО для устройства) выдает true, то можно считать данные с Bluetooth, иначе нет (время ожидания false около 15000 мс., true соответственно быстрее, выяснил это с помощью Stopwatch). Так вот, я хочу сделать следующее: создать поток, в котором создать переменную типа string[] ports, которые определены компьютером. Затем удалять эти порты, если функция возвращает true/false и также если функция не возвращает true/false. Также внешне в классе создать string[] correctports, которые будут добавляться в потоке, если функция возвращает true/false через определенное время (взял время с запасом 16000 мс.). Если не возвращает true/false (происходит зависание, то удалять порт и выходить прекращать операцию). С реализацией пока трудности.

Вот как работает считывание данных:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public const string EksisDLL = "EksisExchange.dll";
 
[DllImport(EksisDLL, CharSet = CharSet.Ansi, SetLastError = true, CallingConvention = CallingConvention.StdCall)]
        public static extern bool EKSIS_Bluetooth_Read(string aPortNum, char aMem, uint aAddr, byte[] aData, ushort aCount);
 
static void Main(string[] args)
{
            string PortNum = "COM4";
            char Mem = 'R';
            uint Addr = 0x0;
            byte[] Data = new byte[254];
            ushort Count = 12;
            float MeasuringTemp;
            float MeasuringHumidy;
            float MeasuringPressure;
            string tech = null;
            float period;
 
            if (EKSIS_Bluetooth_Read("COM4", Mem, Addr, Data, Count))
            {
                MeasuringTemp = BitConverter.ToSingle(Data, 0);
 
                MeasuringHumidity = BitConverter.ToSingle(Data, 4);
 
                MeasuringPressure = BitConverter.ToSingle(Data, 8);
 
                Console.Write("Result: " + MeasuringTemp + " " + MeasuringHumidity + " " + MeasuringPressure + "\r\n");
            }
}
Прошу помочь, так как не справляюсь с этим. Я пока что еще новичок в этом деле, но сделать надо
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.11.2022, 09:42
Ответы с готовыми решениями:

Одна функция вызывает вторую функцию. Как из второй функции заставить первую функцию вернуть true или false?
при попытке отправить форму посылается аякс запрос. В зависимости от того что он вернёт, форма отправляется, либо отправка запрещается. ...

Написать логическую функцию c одним параметром n , которая возвращает результат true, если n- простое и false, если число составное
Написать логическую функцию c одним параметром n , которая возвращает результат true, если n- простое и false, если число составное

Как описать функцию Even(K) логического типа, возвращающую TRUE, если целый параметр K является четным, и FALSE в противном случае
Помогите пожалуйста решить задачу, очень срочно надо. Proc24. Описать функцию Even(K) логического типа, возвращающую TRUE, если целый...

2
2394 / 1923 / 763
Регистрация: 27.07.2012
Сообщений: 5,567
09.11.2022, 20:57
Цитата Сообщение от Shadow1447 Посмотреть сообщение
Так вот, я хочу сделать следующее: создать поток, в котором создать переменную типа string[] ports, которые определены компьютером.
Этот массив возвращается статическим методом SerialPort.GetPortNames(). Не очень понятно, зачем вам тут поток.
Цитата Сообщение от Shadow1447 Посмотреть сообщение
Затем удалять эти порты, если функция возвращает true/false и также если функция не возвращает true/false.
С практической точки зрения смысла немного. А если устройство подключится во время работы программы? А список портов уже не актуален. Проще дать пользователю возможность выбрать порт самому после подключения устройства, как мне кажется.

Цитата Сообщение от Shadow1447 Посмотреть сообщение
если функция возвращает true/false через определенное время (взял время с запасом 16000 мс.). Если не возвращает true/false (происходит зависание, то удалять порт и выходить прекращать операцию)
Принцип примерно такой (это не готовый код, не надо его вставлять в свою программу и потом жаловаться, что не работает):
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var cs = CancellationTokenSource(16000);
try
{
    bool result = await LookForDevice("COM4", cs.Token);
    if (result)
        Console.WriteLine("Device available on COM4");
}
catch (OperationCancellationException)
{
    Console.WriteLine("Device not available");
}
 
// ...
 
Task<bool> LookForDevice(string port, CancellationToken ct)
{
    return Task.Run(() => EKSIS_Bluetooth_Read(port, /* ... */), ct);
}
0
0 / 0 / 0
Регистрация: 29.09.2022
Сообщений: 12
10.11.2022, 06:26  [ТС]
John Prick, спасибо, попробую разобраться
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.11.2022, 06:26
Помогаю со студенческими работами здесь

Функция возвращает true, если число n - натуральное степень числа 2 и false в противном случае
Функция возвращает true, если число n - натуральное степень числа 2 и false в противном случае

Если число является простым, то функция возвращает true, если не является false
Напишите функцию, получающую целое число N(&gt;0). Если оно является простым, то функция возвращает true, если не является false. #include...

Функция, которая возвращает true, если строка состоит только из символов “*”, и false - в противном случае
Напишите функцию isStars(), который возвращает true, если строка состоит только из символов “*”, и false - в противном случае. Очень...

Описать функцию IsPowerN(K, N), возвращающую True, если K является степенью числа N, и False в противном случае
Помогите с задачей, буду очень благодарен! Описать функцию IsPowerN(K, N) логического типа, возвращающую True, если целый параметр...

Создайте функцию, которая возвращает True, если две строки рифмуются, и False в противном случае
3. Создайте функцию, которая возвращает True, если две строки рифмуются, и False в противном случае. Для целей этого упражнения две строки...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru