Переполнение стека при низком энергопотреблении Bluetooth в Windows

Я хотел написать программу, которая получает данные каждые 10 мс через Bluetooth Low Energy.

У меня много дел, но у меня всегда есть одна проблема, и я не могу найти источник.
Вот основа моего кода, написанного на C ++ Builder 10 для Windows 10.

> //---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"//---------------------------------------------------------------------------
#pragma package(smart_init)

#define Characteristic_UUID "{6e400003-b5a3-f393-e0a9-e50e24dcca9e}"#define Service_UUID        "{6e400001-b5a3-f393-e0a9-e50e24dcca9e}"#pragma resource "*.dfm"TForm1 *Form1;
TBluetoothLEDevice* device;
TBluetoothGattCharacteristicList* characteristic ;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
BluetoothLE1->DiscoverDevices(100);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BluetoothLE1EndDiscoverDevices(TObject * const Sender, TBluetoothLEDeviceList * const ADeviceList)

{
device = ADeviceList->First();

BluetoothLE1->DiscoverServices(device);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BluetoothLE1ServicesDiscovered(TObject * const Sender, TBluetoothGattServiceList * const AServiceList)

{

GUID AGuid;
CLSIDFromString(TEXT(Service_UUID), &AGuid);
TBluetoothGattService* service = BluetoothLE1->GetService(device,AGuid);
//TBluetoothGattServiceList* abcd = BluetoothLE1->GetServices(device);CLSIDFromString(TEXT(Characteristic_UUID), &AGuid);
characteristic = BluetoothLE1->GetCharacteristics(service);
while(characteristic->First()->UUID != AGuid)
{
characteristic->Delete(0);

}
if(characteristic->First()!= NULL);
BluetoothLE1->SubscribeToCharacteristic(device,characteristic->First());
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BluetoothLE1CharacteristicRead(TObject * const Sender, TBluetoothGattCharacteristic * const ACharacteristic,
TBluetoothGattStatus AGattStatus)

{
static long i;

Label1->Caption = i;
i++;
}
//---------------------------------------------------------------------------

После 86303 уведомлений (вызывая BluetoothLE1CharacteristicRead) я получаю переполнение стека. Так что должно быть что-то не так.
В начале я написал программу в Visual Studio на C ++ с функциями драйверов Windows, но то же самое.

0

Решение

Я нашел проблему.
Это ошибка в Win32 Bluetooth API.
При обновлении Windows KB3156421 каждая программа падает после одного уведомления, и Mircosoft предлагает обходной путь. Ссылка на сайт

Этот обходной путь исправляет и мою проблему выше.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]