Nebula CommunityФорум

Core in Nebula3. (2 стр)

Страницы: 1 2
#15
17:19, 24 мар 2008

morgue?
Математика в основном. А что?...

>Ты не понял ... они мешают создавать ОДНОВРЕМЕННО (из разных потоков) более
>одного экземпляра.
>Более того, критические секции в этом макросе есть только в ДЕБАГЕ, а в релизе
>их нет.
>Первый поток захватывает критическую секцию и начинает создавать объект.
>В это время второй поток тоже захватывает критическую секцию и ожидает пока
>первый поток освободит ее.
>Создав объект первый поток освобождает ее и второй поток начинает создавать
>объект.
А всё равно в приложении существуют как минимум по 2 указателя на каждую подсистему )

#16
17:20, 24 мар 2008


>Первый поток захватывает критическую секцию и начинает создавать объект.
>В это время второй поток тоже захватывает критическую секцию и ожидает пока
>первый поток освободит ее.
>Создав объект первый поток освобождает ее и второй поток начинает создавать
>объект.
И какой в этом имбический смысл?...

#17
7:47, 25 мар 2008

>morgue?
>Математика в основном. А что?...
Это корзина куда автор сбрасывает не нужные исходники.
В движке они нигде не используются.
Даже название в переводе с английского - морг.

>А всё равно в приложении существуют как минимум по 2 указателя на каждую подсистему )
В любом случае использовать нужно лишь синглетон. Второй лишь для инициализации/деинициализации.
И вобще причем здесь два указателя и одновременное/не одновременное создание объектов ?

>И какой в этом имбический смысл?...
Критические секции, мьютексы, семафоры и т.д. и т.п.
Мне показалось, что у тебя плохо с пониманием что это, зачем нужно вобще
и в частности где и как используется в Небуле.

#18
12:35, 25 мар 2008

>Критические секции, мьютексы, семафоры и т.д. и т.п.
>Мне показалось, что у тебя плохо с пониманием что это, зачем нужно вобще
>и в частности где и как используется в Небуле...
... и именно поэтому я обратился сюда, что бы люди, знакомые с этим, объяснили мне эту цепочку действий.

#19
13:51, 25 мар 2008

>... и именно поэтому я обратился сюда, что бы люди, знакомые с этим, объяснили мне эту цепочку действий.
Я, в общем то, и объясняю.
Хотя лучше всего почитай в инете про многопоточность.
Вот, например, первая попавшаяся ссылка: http://www.codenet.ru/progr/cpp/threads.php
И сразу, вроде, достаточно подробная информация зачем нужны и как использовать.

#20
2:16, 26 мар 2008

Intor
Спасибо, хорошая статья.

Кстати, а сколько в Небуле 3-й потоков работает?

#21
9:19, 26 мар 2008

student
>Кстати, а сколько в Небуле 3-й потоков работает?
По умолчанию четыре.
Рекомендую скачать и разобраться в программе Process Explorer.
В ней можно наблюдать много полезных вещей про работающие процессы.

#22
19:32, 26 мар 2008

Intor
Спасибо.
Ещё вот что хотел бы уточнить.
Зачем определять для каждого класса new/delete?

define DeclareClass(type) \
public: \
    void* operator new(size_t size) \
    { \
        return Memory::Alloc(size); \
    }; \
    void operator delete(void* p) \
    { \
        Memory::Free(p); \
    }; \

Ведь объект класса всё равно создаётся с помощью n_new:

type* type::Create() \
    { \
        RefCounted::criticalSection.Enter(); \
        RefCounted::isInCreate = true; \
        type* newObject = n_new(type); \
        RefCounted::isInCreate = false; \
        RefCounted::criticalSection.Leave(); \
        return newObject; \
    }\

?

#23
19:33, 26 мар 2008

Intor
>student
>>Кстати, а сколько в Небуле 3-й потоков работает?
>По умолчанию четыре.
А какие именно?

#24
7:56, 27 мар 2008

student
>Зачем определять для каждого класса new/delete?
>Ведь объект класса всё равно создаётся с помощью n_new
#define n_new(type) new type
Определен в win32memory.h

>>>Кстати, а сколько в Небуле 3-й потоков работает?
>>По умолчанию четыре.
>А какие именно?
1). Основной (инициализация и редеринг).
      nviewer3.exe!Direct3D9::D3D9RenderDevice::Present+0x6b
      nviewer3.exe!Graphics::GraphicsServer::OnFrame+0x14f
      nviewer3.exe!App::ViewerApplication::OnRenderFrame+0x28
      nviewer3.exe!App::RenderApplication::Run+0xe2
      nviewer3.exe!NebulaMain+0x9a
      nviewer3.exe!WinMain+0x2d
2). Подсистема сообщений.
      nviewer3.exe!Win32::Win32Event::Wait+0x2d
      nviewer3.exe!Threading::SafeQueue<Ptr<Messaging::Message> >::Wait+0x1e
      nviewer3.exe!Messaging::AsyncPort::HandlerThread::DoWork+0x76
      nviewer3.exe!Win32::Win32Thread::ThreadProc+0x68
3). HTTP сервер.
      nviewer3.exe!Win32::Win32Socket::Accept+0x9a
      nviewer3.exe!Net::TcpServer::ListenerThread::DoWork+0x10a
      nviewer3.exe!Win32::Win32Thread::ThreadProc+0x68
4). Служебный поток Direct Input.

#25
14:11, 27 мар 2008

Intor
>student
>>Зачем определять для каждого класса new/delete?
>>Ведь объект класса всё равно создаётся с помощью n_new
>#define n_new(type) new type
>Определен в win32memory.h
Ну так и юзали бы его. Зачем для КАЖДОГО класса определять его снова?

#26
15:04, 27 мар 2008

student
>Ну так и юзали бы его. Зачем для КАЖДОГО класса определять его снова?
Не "снова", а один для всех, просто другой, не стандартный.
Причем смотри особенность: если ты где-то там напишешь "... = new ...", то будет использоваться стандартный аллокатор, а не небуловский.
Для небуловского надо написать "... = n_new ...".
Зачем это ?
Для того, чтобы менеджить память только ДВИЖКА небулы.
Т.е. того, что мы понаписали, а не вобще всего кода.
Для этого же не переопределены всякие malloc, free ...

#27
1:34, 28 мар 2008

Intor
>Зачем это ?
>Для того, чтобы менеджить память только ДВИЖКА небулы.
>Т.е. того, что мы понаписали, а не вобще всего кода.
>Для этого же не переопределены всякие malloc, free ...
Вот тут не понял немного... (

#28
7:37, 28 мар 2008

student
>Вот тут не понял немного... (
К примеру, мы используем несколько сторонних библиотек (sqlite, tinyxml, zlib, ...).
Они для себя выделяют память с помощью, например, malloc, но нам не интересно, что там они понавыделяли для себя ...
Нам интересна лишь та память, что что выделялась в коде самой Небулы, а не сторонних библиотеках.
И поэтому мы переопределяем аллокаторы памяти только для тех объектов, за которыми мы хотим следить.

Прошло более 1 года
#29
23:36, 12 июля 2009

ммм а никто не подскажет зачем __declspec(thread) в синглтоне ?

Страницы: 1 2
Nebula CommunityФорум

Тема в архиве.