[Plugin] Многопоточность (MultiThread)
#1

Описание:
Многопоточность в Pawn. Так же есть возможность синхронизировать потоки (пример ObjectStreamer), что очень важно для разработки своих проектов с использование потоков
Внимание:
Quote:

PAWN is not designed to be multi-threaded and there are no guarantees AT ALL on your data the moment you introduce threads.

Неправильное использование плагина может привести к неработоспособности мода!
Использование:
pawn Код:
#include <thread>
Лог:
  • 0.1.6
    - Добавлена новая функция native CreateThreadEx( const pubname[ ] );
  • 0.1.5
    - Первый релиз.
Natives:
pawn Код:
native CreateThread( const pubname[ ] ); // Создает поток по указанному public, вернет ид потока
native CreateThreadEx( const pubname[ ] );
native DestroyThread( threadid );
native SleepThread( milliseconds ); // Использовать в самом потоке (public)
native LockThread( threadid ); // Синхронизация потока, вернет ид замка
native UnLockThread( lockid );
Примеры:
С CreateThread
pawn Код:
new tickid;

public OnGameModeInit()
{
    tickid = CreateThread( "MyFunction" );
}

public OnGameModeExit()
{
    DestroyThread( tickid );
}

public MyFunction( threadid )
{
    printf( "tick(%d)...", threadid  );
       
    SleepThread( 1000 );
}
С CreateThreadEx
pawn Код:
new bool:active;
new tickid;

public OnGameModeInit()
{
    tickid = CreateThreadEx( "MyFunction" );
}

public OnGameModeExit()
{
    active = false;
}

public MyFunction( threadid )
{
    active = true;
   
    while ( active )
    {
        printf( "tick(%d)...", threadid  );
       
        SleepThread( 1000 );
    }
}
Скачать:
Reply
#2

9 метров исходника? (51 в распакованном виде) оО
Где то подобное видел, это обновление чужого плагина или собственный?
Reply
#3

Quote:
Originally Posted by AirKite
Посмотреть сообщение
9 метров исходника? (51 в распакованном виде) оО
Где то подобное видел, это обновление чужого плагина или собственный?
Своя реализация потоков в Pawn...
Reply
#4

Ну я так понял для создания потоков использовалась библиотека http://www.boost.org/ ?
Reply
#5

Quote:
Originally Posted by Fro1sha
Посмотреть сообщение
Своя реализация потоков в Pawn...
Да, вспомнил где видел. http://www.samp-rus.com/forum/34-17031
Конспиратор блин. Я тебя не узнаю
Reply
#6

Quote:
Originally Posted by AirKite
Посмотреть сообщение
Ну я так понял для создания потоков использовалась библиотека http://www.boost.org/ ?
Да

Quote:
Originally Posted by AirKite
Посмотреть сообщение
Да, вспомнил где видел. http://www.samp-rus.com/forum/34-17031
Конспиратор блин. Я тебя не узнаю
подумал и решил что слишком сложно для простых юзеров это и решил выложить для всех)))
Reply
#7

По-моему ссылки на сторонние проекты запрещены тут... И помнится, что 009 делал подобный.
Reply
#8

Quote:
Originally Posted by OKStyle
Посмотреть сообщение
По-моему ссылки на сторонние проекты запрещены тут... И помнится, что 009 делал подобный.
первым делал ХАОС, потом 009, потом Романус(мне больше всего его реализация нравится), потом кто-то из америкосов, теперь Fro1sha.

ЗЫ ссылки по теме разрешены.
Reply
#9

Новая версия.
Reply
#10

потоко-небезопасный плагин...
Reply
#11

В чём суть CreateThreadEx ? Судя по примеру, в обычный CreateThread нельзя засунуть к примеру while ? оО
Reply
#12

Quote:
Originally Posted by AirKite
Посмотреть сообщение
В чём суть CreateThreadEx ? Судя по примеру, в обычный CreateThread нельзя засунуть к примеру while ? оО
Ну да был создан для того чтобы не использовать функцию DestroyThread в потоке. А так походу потоки в павн и вправду не безопасны для использования))). Хотя может и нет
Reply
#13

запусти сервер из-под отладчика в студии. и создай 1 поток. и увидишь результат
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)