Крашится сф плагин при создании потока(пиздец рандом)

Статус
В этой теме нельзя размещать новые ответы.

rraggerr

проверенный какой-то
Автор темы
1,626
846
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
C++:
CreateThread( NULL , 0 , ( LPTHREAD_START_ROUTINE ) SendSync , NULL , 0 , 0 ); //mainloop

bool thread = false; // один из костылей
void SendSync()
{
thread = true;
    if( !isincar)
    {
        stOnFootData sync;
        memset( &sync , 0 , sizeof( stOnFootData ) );

        sync = sampfuncs->getSAMP()->getPlayers()->pLocalPlayer->onFootData;

        for( int i = 0; i <= 2; i++ )
        {
        sync.fPosition[ i ] = g_c[i];
        }
        sync.fPosition[ 0 ] -= 0.5f;
        sync.fPosition[ 2 ] += 0.5f;

        BitStream bsActorSync;
        bsActorSync.Write( ( BYTE ) ID_PLAYER_SYNC );
        bsActorSync.Write( ( PCHAR ) &sync , sizeof( stOnFootData ) );
        sampfuncs->getRakNet()->SendPacket( &bsActorSync );
    }
    std::this_thread::sleep_for( 10ms ); // или просто Sleep, не важно
    if( !isincar )
        localplayer->ForceSendOnfootSync();
thread = false;
}

C++:
bool Driving( int PlayerID )
{
    if( PlayerID == ACTOR_SELF ) PlayerID = SF->getSAMP()->getPlayers()->sLocalPlayerID;
    int state;
    if( PlayerID == SF->getSAMP()->getPlayers()->sLocalPlayerID )
        state = SF->getSAMP()->getPlayers()->pLocalPlayer->pSAMP_Actor->pGTA_Ped->state;
    else
        state = SF->getSAMP()->getPlayers()->pRemotePlayer[ PlayerID ]->pPlayerData->pSAMP_Actor->pGTA_Ped->state;
    if( state == 50 )
        return true;
    else
        return false;
};
// by srteam
    isincar = Driving( ACTOR_SELF );
// нахуя это надо? - без этой хуйни будет ошибка в одной из структур педа(тоже рандомно)

и в итоге у меня этот поток ебучий срабатывает рандомное количество раз, далее идет краш с какой то неебической ошибкой
p.s поток стартуется 1 раз, проверка на то что поток уже существует есть

и кароче я тут накостылил все что возможно, и всеравно ошибка , и дебаггер не может ее показать, весь прикол в том что если я не буду делать поток - ошибок не будет вообще, все работает без ошибок и крашей, создаю поток - начинается пиздец с рандомными ошибками.
но без потока я не смогу использовать sleep(будут подвисания).

объясняю что хочу сделать:
1. проверки на обьекты(цикл)
2. если обьект подходит по позиции(к примеру)
3. тп к этому обьекту
4. задержка 5 мс(это важно)
5. форс отправки синхры(она нопится заранее)
6. пункт 1
 
Последнее редактирование:

rraggerr

проверенный какой-то
Автор темы
1,626
846
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
выяснил то что если убрать слип то плагин перестает крашится даже если создаю поток, что это за пиздец блять? от слипа идут рандомные ошибки
 

rraggerr

проверенный какой-то
Автор темы
1,626
846
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Нахуя тебе слип в потоке без цикла? mainloop покажи
Попробуй обычный Sleep из WinAPI
нет разницы какой там слип, оно может создать поток этот блядский раз 150 и не крашнутся, а может создать 3 раза и меня ебнет

P.S. Родина тебе GetTickCount дала, бери - не хочу, хочу жрать потоки.
таймер мне не нужен, он не подходит, нужен именно поток с задержкой, чтобы после отправки синхры эта поебота подождала 5 миллисекунд(или больше), а если потока не будет то будут фризы
 

NarutoUA

NarutoUA
BH Team
692
1,537
таймер мне не нужен, он не подходит, нужен именно поток с задержкой, чтобы после отправки синхры эта поебота подождала 5 миллисекунд(или больше), а если потока не будет то будут фризы
земля пухом
 

rraggerr

проверенный какой-то
Автор темы
1,626
846
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.

ЯedЯuM

Malware Maker
244
304
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Прозвучит странно но попробуй заменить ForceSendOnfootSync() на свой костыль, помню когда форс юзал в быстро вызывающейся функе либо хуке то у меня вылетала игра и тоже рандомно.
 

rraggerr

проверенный какой-то
Автор темы
1,626
846
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Прозвучит странно но попробуй заменить ForceSendOnfootSync() на свой костыль, помню когда форс юзал в быстро вызывающейся функе либо хуке то у меня вылетала игра и тоже рандомно.
unknown.png

ошибка даже не в форсе синхры
unknown.png
 

rraggerr

проверенный какой-то
Автор темы
1,626
846
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
ну и ты как минимум не проверяешь структуры игроков на nullptr
это код сртима, и у меня в самом начале mainloop -
C++:
    if( !init )init = startinit();
    if( !localplayer || !SF->getSAMP()->getPlayers()->pLocalPlayer->pSAMP_Actor ) return;

и они не являются nullptr
 

rraggerr

проверенный какой-то
Автор темы
1,626
846
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.

FYP

Известный
Администратор
1,758
5,722
Thread-safety — Википедия(https://ru.wikipedia.org/wiki/Thread-safety)
мультитрединг ракнета в сампе отключен, в сф никакой потокобезопасности нет вообще, соответственно ты не можешь делать то, что пытаешься сделать, в отдельном потоке. юзай костыли с GetTickCount, таймеры, файберы, но не потоки.
 
  • Нравится
Реакции: ™ ChipFamily

rraggerr

проверенный какой-то
Автор темы
1,626
846
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Thread-safety — Википедия(https://ru.wikipedia.org/wiki/Thread-safety)
мультитрединг ракнета в сампе отключен, в сф никакой потокобезопасности нет вообще, соответственно ты не можешь делать то, что пытаешься сделать, в отдельном потоке. юзай костыли с GetTickCount, таймеры, файберы, но не потоки.
не, я сделал включение булевой после того как прошла задержка, и в презенте/маинлупе вызываю то что должно идти после задержки, вот так вот. вроде как работает
 
Статус
В этой теме нельзя размещать новые ответы.