Крашит при отправке синхронизации SF

clicore

Известный
Автор темы
170
124
Почему крашит при отправке stOnFootData? Оно отправляет синхру, но через несколько отправок крашит игру. Вот код:

C++:
stOnFootData data;
memset(&data, 0, sizeof(stOnFootData));
data = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData;
data.byteCurrentWeapon = 24;
BitStream sync;
sync.Write((BYTE)ID_PLAYER_SYNC);
sync.Write((PCHAR)& data, sizeof(stOnFootData));
SF->getRakNet()->SendPacket(&sync);
Как это пофиксить?
 
Решение
Приведи пожалуйста пример?
Вот
C++:
#include <vector> // подключаем библиотеку

// Гдето делаем массив

std::vector<BitStream *> buffer;

// отсюлаем запрос где-то в потоке

stOnFootData data;
memset(&data, 0, sizeof(stOnFootData));
data = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData;
data.byteCurrentWeapon = 24;
BitStream *sync = new BitStream();
sync->Write((BYTE)ID_PLAYER_SYNC);
sync->Write((PCHAR)& data, sizeof(stOnFootData));

buffer.push_back(sync);

// mainloop

if (buffer.size() > 0) {
    BitStream *bs = buffer.front();
    buffer.erase(buffer.begin());
    SF->getRakNet()->SendPacket(bs);
    delete bs;
}

clicore

Известный
Автор темы
170
124
Сниппет вроде норм, скинь фулл код
Зачем тебе фулл код? Крашит только когда я использую только этот участок кода, попробуй сам отправлять синхру несколько раз, например раз в 250 мс, тебя крашнет. Вот меня и интересует, почему так?
 

Cake_

Известный
Проверенный
263
313
Зачем тебе фулл код? Крашит только когда я использую только этот участок кода, попробуй сам отправлять синхру несколько раз, например раз в 250 мс, тебя крашнет. Вот меня и интересует, почему так?
Нечего не крашит у меня
 

clicore

Известный
Автор темы
170
124
Нечего не крашит у меня
Ну у меня тоже не крашит, когда я не использую этот участок кода. Всегда когда начинаю отправлять асинхронно пакеты несколько раз, не важно какие, происходит краш.
 

Stiopko

Известный
Проверенный
307
218
Ну у меня тоже не крашит, когда я не использую этот участок кода. Всегда когда начинаю отправлять асинхронно пакеты несколько раз, не важно какие, происходит краш.
Fyp уже гдето писал что сф не предназначен для работь в многопоточном режиме, используй.какойто буффер(что на подобии vector), добавляй туда битстрим, и потом в маинлууп бери из буффера по одному елементу и отпрвляй пакет
 

clicore

Известный
Автор темы
170
124
Fyp уже гдето писал что сф не предназначен для работь в многопоточном режиме, используй.какойто буффер(что на подобии vector), добавляй туда битстрим, и потом в маинлууп бери из буффера по одному елементу и отпрвляй пакет
Приведи пожалуйста пример?
 

Stiopko

Известный
Проверенный
307
218
Приведи пожалуйста пример?
Вот
C++:
#include <vector> // подключаем библиотеку

// Гдето делаем массив

std::vector<BitStream *> buffer;

// отсюлаем запрос где-то в потоке

stOnFootData data;
memset(&data, 0, sizeof(stOnFootData));
data = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData;
data.byteCurrentWeapon = 24;
BitStream *sync = new BitStream();
sync->Write((BYTE)ID_PLAYER_SYNC);
sync->Write((PCHAR)& data, sizeof(stOnFootData));

buffer.push_back(sync);

// mainloop

if (buffer.size() > 0) {
    BitStream *bs = buffer.front();
    buffer.erase(buffer.begin());
    SF->getRakNet()->SendPacket(bs);
    delete bs;
}
 

clicore

Известный
Автор темы
170
124
Вот
C++:
#include <vector> // подключаем библиотеку

// Гдето делаем массив

std::vector<BitStream *> buffer;

// отсюлаем запрос где-то в потоке

stOnFootData data;
memset(&data, 0, sizeof(stOnFootData));
data = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData;
data.byteCurrentWeapon = 24;
BitStream *sync = new BitStream();
sync->Write((BYTE)ID_PLAYER_SYNC);
sync->Write((PCHAR)& data, sizeof(stOnFootData));

buffer.push_back(sync);

// mainloop

if (buffer.size() > 0) {
    BitStream *bs = buffer.front();
    buffer.erase(buffer.begin());
    SF->getRakNet()->SendPacket(bs);
    delete bs;
}
Спасибо, лучший!