SA-MP Forums Archive
[Plugin] Многопоточность (MultiThread) - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Русский/Russian (https://sampforum.blast.hk/forumdisplay.php?fid=32)
+----- Forum: Релизы/Releases (https://sampforum.blast.hk/forumdisplay.php?fid=66)
+----- Thread: [Plugin] Многопоточность (MultiThread) (/showthread.php?tid=264181)



Многопоточность (MultiThread) - Fro1sha - 25.06.2011

Описание:
Многопоточность в 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>
Лог: 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 );
    }
}
Скачать:


Re: Многопоточность (MultiThread) - AirKite - 25.06.2011

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


Re: Многопоточность (MultiThread) - Fro1sha - 25.06.2011

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


Re: Многопоточность (MultiThread) - AirKite - 25.06.2011

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


Re: Многопоточность (MultiThread) - AirKite - 25.06.2011

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


Re: Многопоточность (MultiThread) - Fro1sha - 25.06.2011

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

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


Re: Многопоточность (MultiThread) - OKStyle - 26.06.2011

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


Re: Многопоточность (MultiThread) - Stepashka - 26.06.2011

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

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


Re: Многопоточность (MultiThread) - Fro1sha - 26.06.2011

Новая версия.


Re: Многопоточность (MultiThread) - Romanius - 26.06.2011

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


Re: Многопоточность (MultiThread) - AirKite - 26.06.2011

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


Re: Многопоточность (MultiThread) - Fro1sha - 26.06.2011

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


Re: Многопоточность (MultiThread) - Romanius - 30.06.2011

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