Перейти в начало страницы

Здравствуйте, гость ( Авторизация | Регистрация )

Gameru.net останавливает работу в связи с вторжением армии РФ в Украину. Следите за дальнейшими анонсами.
Support Gameru!

> Помощь по разделу

Сайт S.T.A.L.K.E.R. Inside / [ЗП] Параметры командной строки / Распаковщик ресурсов

4 страниц V  < 1 2 3 4 >  
Тема закрытаНачать новую тему
> [ТЧ,ЧН,ЗП] Многоядерность, Используем два и более ядер
-StalkMen-
сообщение 14.08.2015, 15:40
Сообщение #21


Продвинутый геймер
********

Репутация:   22  
Группа: Участник
Сообщений: 234
Награды: 3
Регистрация: 27.10.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа


Мне вообще кажется, что надо boost вырезать из luabind'а. А вместо него использовать плюшки C++0x.

Что-то вроде такого
Было

Код
// new(1)
template <class T, class P1>
IC    T*        xr_new        (const P1& p1) {
    T* ptr    = (T*)Memory.mem_alloc(sizeof(T), typeid(T).name());
    return new (ptr) T(p1);
}
// new(2)
template <class T, class P1, class P2>
IC    T*        xr_new        (const P1& p1, const P2& p2) {
    T* ptr    = (T*)Memory.mem_alloc(sizeof(T), typeid(T).name());
    return new (ptr) T(p1,p2);
}
// new(3)
template <class T, class P1, class P2, class P3>
IC    T*        xr_new        (const P1& p1, const P2& p2, const P3& p3) {
    T* ptr    = (T*)Memory.mem_alloc(sizeof(T), typeid(T).name());
    return new (ptr) T(p1,p2,p3);
}


Стало
Код
// new()
template <class T, class ... Args>
IC    T*        xr_new(const Args& ... args)
{
    T* ptr    = (T*)Memory.mem_alloc(sizeof(T));
    return new (ptr)T(args...);
}
Перейти в начало страницы
 
abramcumner
сообщение 14.08.2015, 16:16
Сообщение #22


Игровое Воплощение
*********************

Репутация:   394  
Группа: Участник
Сообщений: 4791
Награды: 4
Регистрация: 27.04.2011




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(-StalkMen- @ 14.08.2015, 15:35) *
Мне вообще кажется, что надо boost вырезать из luabind'а. А вместо него использовать плюшки C++0x.

Кто-то уже вырезал. Может Tron?
Перейти в начало страницы
 
Stalker_Monolit
сообщение 14.08.2015, 16:59
Сообщение #23


Опытный Геймер
*******

Репутация:   17  
Группа: Участник
Сообщений: 161
Награды: 3
Регистрация: 08.03.2015




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(-StalkMen- @ 14.08.2015, 15:35) *
// new(1)
template <class T, class P1>
IC    T*        xr_new        (const P1& p1) {
    T* ptr    = (T*)Memory.mem_alloc(sizeof(T), typeid(T).name());
    return new (ptr) T(p1);
}
// new(2)
template <class T, class P1, class P2>
IC    T*        xr_new        (const P1& p1, const P2& p2) {
    T* ptr    = (T*)Memory.mem_alloc(sizeof(T), typeid(T).name());
    return new (ptr) T(p1,p2);
}
// new(3)
template <class T, class P1, class P2, class P3>
IC    T*        xr_new        (const P1& p1, const P2& p2, const P3& p3) {
    T* ptr    = (T*)Memory.mem_alloc(sizeof(T), typeid(T).name());
    return new (ptr) T(p1,p2,p3);
}

А ты разве свой проект в debug режиме слаживаешь? Первая строка DEBUG_MEMORY_NAME
Клац
#ifdef DEBUG_MEMORY_NAME
// new(0)
template <class T>
IC T* xr_new ()
{
T* ptr = (T*)Memory.mem_alloc(sizeof(T), typeid(T).name());
return new (ptr) T();
}
// new(1)
template <class T, class P1>
IC T* xr_new (const P1& p1) {
T* ptr = (T*)Memory.mem_alloc(sizeof(T), typeid(T).name());
return new (ptr) T(p1);
}
// new(2)
template <class T, class P1, class P2>
IC T* xr_new (const P1& p1, const P2& p2) {
T* ptr = (T*)Memory.mem_alloc(sizeof(T), typeid(T).name());
return new (ptr) T(p1,p2);
}
// new(3)
template <class T, class P1, class P2, class P3>
IC T* xr_new (const P1& p1, const P2& p2, const P3& p3) {
T* ptr = (T*)Memory.mem_alloc(sizeof(T), typeid(T).name());
return new (ptr) T(p1,p2,p3);
}
// new(4)
template <class T, class P1, class P2, class P3, class P4>
IC T* xr_new (const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
T* ptr = (T*)Memory.mem_alloc(sizeof(T), typeid(T).name());
return new (ptr) T(p1,p2,p3,p4);
}
// new(5)
template <class T, class P1, class P2, class P3, class P4, class P5>
IC T* xr_new (const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
T* ptr = (T*)Memory.mem_alloc(sizeof(T), typeid(T).name());
return new (ptr) T(p1,p2,p3,p4,p5);
}
// new(6)
template <class T, class P1, class P2, class P3, class P4, class P5, class P6>
IC T* xr_new (const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5, const P6& p6) {
T* ptr = (T*)Memory.mem_alloc(sizeof(T), typeid(T).name());
return new (ptr) T(p1,p2,p3,p4,p5,p6);
}
// new(7)
template <class T, class P1, class P2, class P3, class P4, class P5, class P6, class P7>
IC T* xr_new (const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5, const P6& p6, const P7& p7) {
T* ptr = (T*)Memory.mem_alloc(sizeof(T), typeid(T).name());
return new (ptr) T(p1,p2,p3,p4,p5,p6,p7);
}
// new(8)
template <class T, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8>
IC T* xr_new (const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5, const P6& p6, const P7& p7, const P8& p8) {
T* ptr = (T*)Memory.mem_alloc(sizeof(T), typeid(T).name());
return new (ptr) T(p1,p2,p3,p4,p5,p6,p7,p8);
}
// new(9)
template <class T, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8, class P9>
IC T* xr_new (const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5, const P6& p6, const P7& p7, const P8& p8, const P8& p9) {
T* ptr = (T*)Memory.mem_alloc(sizeof(T), typeid(T).name());
return new (ptr) T(p1,p2,p3,p4,p5,p6,p7,p8,p9);
}
#else // DEBUG_MEMORY_NAME
// new(0)
template <class T>
IC T* xr_new ()
{
T* ptr = (T*)Memory.mem_alloc(sizeof(T));
return new (ptr) T();
}
// new(1)
template <class T, class P1>
IC T* xr_new (const P1& p1) {
T* ptr = (T*)Memory.mem_alloc(sizeof(T));
return new (ptr) T(p1);
}
// new(2)
template <class T, class P1, class P2>
IC T* xr_new (const P1& p1, const P2& p2) {
T* ptr = (T*)Memory.mem_alloc(sizeof(T));
return new (ptr) T(p1,p2);
}
// new(3)
template <class T, class P1, class P2, class P3>
IC T* xr_new (const P1& p1, const P2& p2, const P3& p3) {
T* ptr = (T*)Memory.mem_alloc(sizeof(T));
return new (ptr) T(p1,p2,p3);
}
// new(4)
template <class T, class P1, class P2, class P3, class P4>
IC T* xr_new (const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
T* ptr = (T*)Memory.mem_alloc(sizeof(T));
return new (ptr) T(p1,p2,p3,p4);
}
// new(5)
template <class T, class P1, class P2, class P3, class P4, class P5>
IC T* xr_new (const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
T* ptr = (T*)Memory.mem_alloc(sizeof(T));
return new (ptr) T(p1,p2,p3,p4,p5);
}
// new(6)
template <class T, class P1, class P2, class P3, class P4, class P5, class P6>
IC T* xr_new (const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5, const P6& p6) {
T* ptr = (T*)Memory.mem_alloc(sizeof(T));
return new (ptr) T(p1,p2,p3,p4,p5,p6);
}
// new(7)
template <class T, class P1, class P2, class P3, class P4, class P5, class P6, class P7>
IC T* xr_new (const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5, const P6& p6, const P7& p7) {
T* ptr = (T*)Memory.mem_alloc(sizeof(T));
return new (ptr) T(p1,p2,p3,p4,p5,p6,p7);
}
// new(8)
template <class T, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8>
IC T* xr_new (const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5, const P6& p6, const P7& p7, const P8& p8) {
T* ptr = (T*)Memory.mem_alloc(sizeof(T));
return new (ptr) T(p1,p2,p3,p4,p5,p6,p7,p8);
}
// new(9)
template <class T, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8, class P9>
IC T* xr_new (const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5, const P6& p6, const P7& p7, const P8& p8, const P8& p9) {
T* ptr = (T*)Memory.mem_alloc(sizeof(T));
return new (ptr) T(p1,p2,p3,p4,p5,p6,p7,p8,p9);
}
#endif // DEBUG_MEMORY_NAME


--------------------

Перейти в начало страницы
 
-StalkMen-
сообщение 14.08.2015, 17:21
Сообщение #24


Продвинутый геймер
********

Репутация:   22  
Группа: Участник
Сообщений: 234
Награды: 3
Регистрация: 27.10.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа


Stalker_Monolit,
Обычно нет, мой ДеБуг, это Mixed (Копия Release без оптимизации)
Клац
Перейти в начало страницы
 
Stalker_Monolit
сообщение 14.08.2015, 17:27
Сообщение #25


Опытный Геймер
*******

Репутация:   17  
Группа: Участник
Сообщений: 161
Награды: 3
Регистрация: 08.03.2015




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(-StalkMen- @ 14.08.2015, 17:16) *
Stalker_Monolit,
Обычно нет, мой ДеБуг, это Mixed (Копия Release без оптимизации)
Клац

Понятно blush1.gif ты не знаешь что за приоритеты выставлены почти каждому проекту?
R1
Код
Device.seqFrame.Add    (this,REG_PRIORITY_HIGH+0x12345678);

R2
Код
Device.seqFrame.Add    (this,REG_PRIORITY_HIGH+0x12345678);

R3
Код
Device.seqFrame.Add    (this,REG_PRIORITY_HIGH+0x12345678);

И мне кажется есть связь с pure.h в котором вот это:
Клац
#ifndef _PURE_H_AAA_
#define _PURE_H_AAA_

// messages
#define REG_PRIORITY_LOW 0x11111111ul
#define REG_PRIORITY_NORMAL 0x22222222ul
#define REG_PRIORITY_HIGH 0x33333333ul
#define REG_PRIORITY_CAPTURE 0x7ffffffful
#define REG_PRIORITY_INVALID 0xfffffffful

typedef void __fastcall RP_FUNC (void *obj);
#define DECLARE_MESSAGE(name) extern ENGINE_API RP_FUNC rp_##name; class ENGINE_API pure##name { public: virtual void On##name(void)=0; }
#define DECLARE_RP(name) void __fastcall rp_##name(void *p) { ((pure##name *)p)->On##name(); }

DECLARE_MESSAGE(Frame);
DECLARE_MESSAGE(Render);
DECLARE_MESSAGE(AppActivate);
DECLARE_MESSAGE(AppDeactivate);
DECLARE_MESSAGE(AppStart);
DECLARE_MESSAGE(AppEnd);
DECLARE_MESSAGE(DeviceReset);

//-----------------------------------------------------------------------------
struct _REG_INFO {
void* Object;
int Prio;
u32 Flags;
};

ENGINE_API extern int __cdecl _REG_Compare(const void *, const void *);

template <class T> class CRegistrator // the registrator itself
{
friend ENGINE_API int __cdecl _REG_Compare(const void *, const void *);
public:
xr_vector<_REG_INFO> R;
// constructor
struct {
u32 in_process :1;
u32 changed :1;
};
CRegistrator() { in_process=false; changed=false;}

//
void Add (T *obj, int priority=REG_PRIORITY_NORMAL, u32 flags=0)
{
#ifdef DEBUG
VERIFY (priority!=REG_PRIORITY_INVALID);
VERIFY (obj);
for (u32 i=0; i<R.size(); i++) VERIFY( !((R[i].Prio!=REG_PRIORITY_INVALID)&&(R[i].Object==(void*)obj)) );
#endif
_REG_INFO I;
I.Object =obj;
I.Prio =priority;
I.Flags =flags;
R.push_back (I);

if(in_process) changed=true;
else Resort ( );
};
void Remove (T *obj)
{
for (u32 i=0; i<R.size(); i++) {
if (R[i].Object==obj) R[i].Prio = REG_PRIORITY_INVALID;
}
if(in_process) changed=true;
else Resort ( );
};
void Process(RP_FUNC *f)
{
in_process = true;
if (R.empty()) return;
if (R[0].Prio==REG_PRIORITY_CAPTURE) f(R[0].Object);
else {
for (u32 i=0; i<R.size(); i++)
if(R[i].Prio!=REG_PRIORITY_INVALID)
f(R[i].Object);

}
if(changed) Resort();
in_process = false;
};
void Resort (void)
{
qsort (&*R.begin(),R.size(),sizeof(_REG_INFO),_REG_Compare);
while ((R.size()) && (R[R.size()-1].Prio==REG_PRIORITY_INVALID)) R.pop_back();
if (R.empty()) R.clear ();
changed = false;
};
};

#endif


Сообщение отредактировал Stalker_Monolit - 14.08.2015, 17:28


--------------------

Перейти в начало страницы
 
-StalkMen-
сообщение 14.08.2015, 17:35
Сообщение #26


Продвинутый геймер
********

Репутация:   22  
Группа: Участник
Сообщений: 234
Награды: 3
Регистрация: 27.10.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа


Stalker_Monolit,
Приоритет - выше высокого.
Перейти в начало страницы
 
Tron
сообщение 14.08.2015, 18:30
Сообщение #27


Игровой Эксперт
***************

Репутация:   407  
Группа: Участник
Сообщений: 2394
Награды: 5
Регистрация: 19.01.2009




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(abramcumner @ 14.08.2015, 16:11) *
Цитата(-StalkMen- @ 14.08.2015, 15:35) *
Мне вообще кажется, что надо boost вырезать из luabind'а. А вместо него использовать плюшки C++0x.

Кто-то уже вырезал. Может Tron?


Не, я этим не занимался. Хотел, но не сделал.
То,что по ссылке выше там же вариадик темплейты, их поддержка только в 13ой студии появилась.
Есть форк луабинда, там С++11 плюшки есть, но собирается и с более ранней студией(с 12 точно)

Added:
Версию с новым луабиндом делал codepoet, но у него что-то там не срослось,ибо он не довел ее

Сообщение отредактировал Tron - 14.08.2015, 18:31
Перейти в начало страницы
 
Tron
сообщение 23.08.2015, 09:42
Сообщение #28


Игровой Эксперт
***************

Репутация:   407  
Группа: Участник
Сообщений: 2394
Награды: 5
Регистрация: 19.01.2009




Вставить ник Цитировать выделенное в форуму быстрого ответа


Сегодня курил код, нашел механизм работы с потоками. Точнее, я его и до этого видел, но сегодня я прям отладчиком на него попал

Многопоточный рендер там точно есть(ему выделен 1 дополнительный поток, помимо основного).
Даже есть команда для мнгп. окклуюжена

Сообщение отредактировал Tron - 23.08.2015, 09:46
Перейти в начало страницы
 
-StalkMen-
сообщение 23.08.2015, 15:41
Сообщение #29


Продвинутый геймер
********

Репутация:   22  
Группа: Участник
Сообщений: 234
Награды: 3
Регистрация: 27.10.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа


Tron,
Цитата(Tron @ 23.08.2015, 09:37) *
1 дополнительный поток

"X-RAY Secondary thread" Этот?

На сколько я знаю, оба потока работают последовательно sad.gif

Тогда где же тут
Цитата(Tron @ 23.08.2015, 09:37) *
Многопоточный рендер

???
Перейти в начало страницы
 
MegaNub
сообщение 23.08.2015, 16:27
Сообщение #30


Продвинутый геймер
********

Репутация:   15  
Группа: Участник
Сообщений: 322
Награды: 3
Регистрация: 01.05.2014




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(Tron @ 12.08.2015, 20:01) *
По сути boost используется только luabind'ом

В xrNetServer для расчёта CRC?
Перейти в начало страницы
 
Tron
сообщение 24.08.2015, 05:48
Сообщение #31


Игровой Эксперт
***************

Репутация:   407  
Группа: Участник
Сообщений: 2394
Награды: 5
Регистрация: 19.01.2009




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(-StalkMen- @ 23.08.2015, 15:36) *
Tron,
Цитата(Tron @ 23.08.2015, 09:37) *
1 дополнительный поток

"X-RAY Secondary thread" Этот?

На сколько я знаю, оба потока работают последовательно sad.gif

Тогда где же тут
Цитата(Tron @ 23.08.2015, 09:37) *
Многопоточный рендер

???

в консольных командах есть r2_mt

Но вообще я возможно ошибся

Цитата(MegaNub @ 23.08.2015, 16:22) *
В xrNetServer для расчёта CRC?

можно легко заменить на вариант из zlib
Перейти в начало страницы
 
-StalkMen-
сообщение 24.08.2015, 14:42
Сообщение #32


Продвинутый геймер
********

Репутация:   22  
Группа: Участник
Сообщений: 234
Награды: 3
Регистрация: 27.10.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(Tron @ 24.08.2015, 05:43) *
r2_mt

Код
void CRender::OnFrame()
{
    Models->DeleteQueue            ();
    if (ps_r2_ls_flags.test(R2FLAG_EXP_MT_CALC))    {
        // MT-details (@front)
        Device.seqParallel.insert    (Device.seqParallel.begin(),
            fastdelegate::FastDelegate0<>(Details,&CDetailManager::MT_CALC));

        // MT-HOM (@front)
        Device.seqParallel.insert    (Device.seqParallel.begin(),
            fastdelegate::FastDelegate0<>(&HOM,&CHOM::MT_RENDER));
    }
}

Что-то есть, но Много Поточности нема laugh.gif
Перейти в начало страницы
 
Neo][
сообщение 24.08.2015, 16:03
Сообщение #33


The One
****************

Репутация:   744  
Группа: Участник
Сообщений: 2715
Награды: 5
Регистрация: 05.12.2005




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(-StalkMen- @ 24.08.2015, 16:37) *
Что-то есть, но Много Поточности нема

-StalkMen-, почему такой вывод?


--------------------
Перейти в начало страницы
 
abramcumner
сообщение 24.08.2015, 16:31
Сообщение #34


Игровое Воплощение
*********************

Репутация:   394  
Группа: Участник
Сообщений: 4791
Награды: 4
Регистрация: 27.04.2011




Вставить ник Цитировать выделенное в форуму быстрого ответа


Три(основной+MT-details+MT-HOM) это разве много? z_lol1.gif

Сообщение отредактировал abramcumner - 24.08.2015, 16:31
Перейти в начало страницы
 
Neo][
сообщение 24.08.2015, 16:40
Сообщение #35


The One
****************

Репутация:   744  
Группа: Участник
Сообщений: 2715
Награды: 5
Регистрация: 05.12.2005




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(abramcumner @ 24.08.2015, 18:26) *
Три(основной+MT-details+MT-HOM) это разве много?

Ну, только если так смотреть, тогда действительно нема ))

Сообщение отредактировал Neo][ - 24.08.2015, 16:41


--------------------
Перейти в начало страницы
 
Tron
сообщение 24.08.2015, 17:20
Сообщение #36


Игровой Эксперт
***************

Репутация:   407  
Группа: Участник
Сообщений: 2394
Награды: 5
Регистрация: 19.01.2009




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(abramcumner @ 24.08.2015, 16:26) *
Три(основной+MT-details+MT-HOM) это разве много? z_lol1.gif


Цитата(Neo][ @ 24.08.2015, 16:35) *

Цитата(abramcumner @ 24.08.2015, 18:26) *
Три(основной+MT-details+MT-HOM) это разве много?

Ну, только если так смотреть, тогда действительно нема ))


Если так рассуждать, то у меня для вас очень плохие новости..

Во первых Occlusion Query очень дорогая операция, и ее результат будет доступен только через 1-5 кадров, после вызова.
- я лично с этим столкнулся. Да, долго не верил, т.к на моей машине это было незаметно, но запустив на старой машине, я получил прирост почти в 2 раза.
А все из-за чего? - ждем ответа от CPU.
Т.Е в теории это должно повысить производительность

Во вторых, сама операция создания треда, очень дорогая, и ее должно быть как можно меньше. Поэтому и используется Task-Based подход

Сообщение отредактировал Tron - 24.08.2015, 17:21
Перейти в начало страницы
 
Neo][
сообщение 24.08.2015, 17:27
Сообщение #37


The One
****************

Репутация:   744  
Группа: Участник
Сообщений: 2715
Награды: 5
Регистрация: 05.12.2005




Вставить ник Цитировать выделенное в форуму быстрого ответа


Tron, sarcasm.gif


--------------------
Перейти в начало страницы
 
-StalkMen-
сообщение 24.08.2015, 20:09
Сообщение #38


Продвинутый геймер
********

Репутация:   22  
Группа: Участник
Сообщений: 234
Награды: 3
Регистрация: 27.10.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(Neo][ @ 24.08.2015, 15:58) *

почему такой вывод?

Код
void             mt_Thread    (void *ptr)    {
    while (true) {
        // waiting for Device permission to execute
        Device.mt_csEnter.Enter    ();

        if (Device.mt_bMustExit) {
            Device.mt_bMustExit = FALSE;                // Important!!!
            Device.mt_csEnter.Leave();                    // Important!!!
            return;
        }
        // we has granted permission to execute
        mt_Thread_marker            = Device.dwFrame;

        for (u32 pit=0; pit<Device.seqParallel.size(); pit++)
            Device.seqParallel[pit]    ();
        Device.seqParallel.clear_not_free    ();
        Device.seqFrameMT.Process    (rp_Frame);

        // now we give control to device - signals that we are ended our work
        Device.mt_csEnter.Leave    ();
        // waits for device signal to continue - to start again
        Device.mt_csLeave.Enter    ();
        // returns sync signal to device
        Device.mt_csLeave.Leave    ();
    }
}

Один поток плодит работЫ, засыпает, другой их делает и засыпает о_О. И так по кругу. (Хоть основных потоков 2, но они работают, как один - последовательно)
Перейти в начало страницы
 
Stalker_Monolit
сообщение 24.08.2015, 20:12
Сообщение #39


Опытный Геймер
*******

Репутация:   17  
Группа: Участник
Сообщений: 161
Награды: 3
Регистрация: 08.03.2015




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(-StalkMen- @ 24.08.2015, 20:04) *
Хоть основных потоков 2, но они работают, как один - последовательно

Интересно если их сделать параллельно что то изменится? unsure.gif


--------------------

Перейти в начало страницы
 
Tron
сообщение 24.08.2015, 21:40
Сообщение #40


Игровой Эксперт
***************

Репутация:   407  
Группа: Участник
Сообщений: 2394
Награды: 5
Регистрация: 19.01.2009




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(-StalkMen- @ 24.08.2015, 20:04) *
Один поток плодит работЫ, засыпает, другой их делает и засыпает о_О. И так по кругу. (Хоть основных потоков 2, но они работают, как один - последовательно)

Пояснить логику можешь?
Я вот смотрю и вижу другую логику работы, согласно данному семплу

И да, поток не засыпает, т.к нету вызова sleep_for или эквивалента
Перейти в начало страницы
 

4 страниц V  < 1 2 3 4 >
Тема закрытаНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 25.04.2024, 18:35