- Katılım
- 6 Eyl 2017
- Konular
- 53
- Mesajlar
- 358
- Çözüm
- 1
- Online süresi
- 1mo 8d
- Reaksiyon Skoru
- 169
- Altın Konu
- 1
- TM Yaşı
- 8 Yıl 9 Ay 7 Gün
- Başarım Puanı
- 129
- Yaş
- 32
- MmoLira
- 6,475
- DevLira
- 78
ROHAN2 WORLD 1-120 TR TİPİ OFFICIAL YOHARA, BALATHOR VE AMON! 80. GÜNÜNDE! +10.000 ONLİNE! HİLE VE BOT %100 ENGELLİ HEMEN TIKLA!
common/singleton.h güncelle;
kanal başına 41613(atıyorum) karakter, mob a kadar sınırlarken bunu uçuruyor. Zamanında bellek koruma amaçlı yapılmış ama günümüzde gerek yok böyle şeylere ayıptır yani.
Bonus:
channeleri ch1_1 ch1_2 diye ayırmanıza gerek kalmaz artık.
Kanıt;
Mesela burada 5k+ yabani köpke var normalde yapamazsınız kanal çöker ama düzeltmeden sonra 500k+ da çağırabilirsiniz. TAbi bu sefer client pert olur.
#ifndef __INC_SINGLETON_H__
#define __INC_SINGLETON_H__
#include <memory>
#include <cassert>
#include <mutex>
template <typename T>
class singleton {
public:
// Singleton örneğini tutan static pointer
static std::unique_ptr<T> ms_singleton;
static std::mutex mtx; // Lock için mutex
// Constructor
singleton() {
std::lock_guard<std::mutex> lock(mtx); // Thread-safe başlatma
assert(!ms_singleton); // Eğer zaten bir örnek varsa hata ver
ms_singleton.reset(static_cast<T*>(this)); // Nesneyi başlat
}
// Destructor
virtual ~singleton() {
std::lock_guard<std::mutex> lock(mtx);
assert(ms_singleton); // Eğer singleton örneği yoksa hata ver
ms_singleton.reset(nullptr); // Örneği null yap
}
// Singleton örneğini döner
static T& instance() {
assert(ms_singleton); // Eğer örnek yoksa hata ver
return *ms_singleton;
}
// Singleton örneğini pointer olarak döner
static T* instance_ptr() {
return ms_singleton.get();
}
};
// Static üyeler
template <typename T> std::unique_ptr<T> singleton<T>::ms_singleton = nullptr;
template <typename T> std::mutex singleton<T>::mtx;
#endif
kanal başına 41613(atıyorum) karakter, mob a kadar sınırlarken bunu uçuruyor. Zamanında bellek koruma amaçlı yapılmış ama günümüzde gerek yok böyle şeylere ayıptır yani.
Bonus:
channeleri ch1_1 ch1_2 diye ayırmanıza gerek kalmaz artık.
Kanıt;
Mesela burada 5k+ yabani köpke var normalde yapamazsınız kanal çöker ama düzeltmeden sonra 500k+ da çağırabilirsiniz. TAbi bu sefer client pert olur.
Son düzenleme:
En Çok Reaksiyon Alan Mesajlar
ben adamın paylaştığını paste2 yaptım sadece
Aynen öyle herkesin tuttuğu kendineÖğeyi görmek için üye olmalısınız.Herkesin singleton u kendine
Metin2'nin single-theard yapısı için oldukça gereksiz ve maliyetli bir refactoring olmuş maalesef, konunun açılışından çok süre geçmiş ama gözden kaçırmışım, şimdi görünce yorum yapmadan geçmek istemedim, hala bu konuyu görüp uygulamaya çalışan birileri olabilir. Oyun çoğu senaryoda single-theard garanti ettiği için mutex kullanımı gereksiz yük ve anlamsız bir maliyet, oyunun belki de en çok kullanılan header dosyası, performansın en kritik oldu dosya dolayısıyla buna uygun şekilde yazılmalı ve kullanılmalı. Kendi projemde kullandığım versiyonu paylaşıyorum belki birilerinin işine yarar;
C++:#ifndef __INC_SINGLETON_H__ #define __INC_SINGLETON_H__ #include <cassert> #include "service.h" #include "../libthecore/include/log.h" // After a critic ASan (-fsantinizer) warning, i've made a full rework for this header. // It's now fully compatible with modern C++ and also much more faster/optimized. - [MT2Dev Note] - 20/06/2025 #ifdef __WIN32__ #define FORCE_INLINE [[nodiscard]] __forceinline #else #define FORCE_INLINE [[gnu::always_inline]] [[nodiscard]] #endif //__WIN32__ template <typename T> class singleton { private: static inline T* ms_singleton = nullptr; #ifdef TEST_SINGLETON_MODE static inline bool ms_destroying = false; // Debugging - Lifecycle tracking. - [MT2Dev Note] #endif //TEST_SINGLETON_MODE public: singleton() { // Debugging - Double initialization control. - [MT2Dev Note] #ifdef TEST_SINGLETON_MODE #ifdef __WIN32__ assert (!ms_singleton && "Singleton already exists! Multiple instances not allowed!"); assert (!ms_destroying && "Cannot create singleton during destruction phase!"); #else if (ms_singleton) { sys_err ("<FATAL ERROR> Singleton already exists! Multiple instances not allowed!"); } if (ms_destroying) { sys_err ("<FATAL ERROR> Cannot create singleton during destruction phase!"); } #endif //__WIN32__ #endif //TEST_SINGLETON_MODE ms_singleton = static_cast<T*> (this); } virtual ~singleton() { #ifdef TEST_SINGLETON_MODE #ifdef __WIN32__ assert (ms_singleton && "Singleton destructor called but instance is nullptr!"); #else if (!ms_singleton) { sys_err ("<FATAL ERROR> Singleton destructor called but instance is nullptr!"); } #endif //__WIN32__ ms_destroying = true; #endif //TEST_SINGLETON_MODE ms_singleton = nullptr; #ifdef TEST_SINGLETON_MODE ms_destroying = false; #endif //TEST_SINGLETON_MODE } FORCE_INLINE static T& Instance() { #ifdef TEST_SINGLETON_MODE #ifdef __WIN32__ assert (ms_singleton && "Singleton not initialized! Create instance first!"); assert (!ms_destroying && "Accessing singleton during destruction!"); #else if (!ms_singleton) { sys_err ("<FATAL ERROR> Singleton not initialized! Create instance first!"); } if (ms_destroying) { sys_err ("<FATAL ERROR> Accessing singleton during destruction!"); } #endif //__WIN32__ #endif //TEST_SINGLETON_MODE return *ms_singleton; } FORCE_INLINE static T& instance() // For old compatibility support. - [MT2Dev Note] { return Instance(); } // Copy/Move semantics. - [MT2Dev Note] singleton (const singleton&) = delete; singleton& operator= (const singleton&) = delete; singleton (singleton&&) = delete; singleton& operator= (singleton&&) = delete; }; #endif //__INC_SINGLETON_H__ // MT2DevCore Project | Modern Base SF by MT2Dev | 2025
Yapay zekaya yazdırılmış kod, Stack ile heap arasındaki farkı bilmeyen paylaşımcı..
o kadar yazılımcı var burda, 1 kişide çıkıp dememiş bu singleton sınıfı kalıtım alan sınıfın dinamik bellek ile oluşturulmasını beklerken CHARACTER_MANAGER stack'te oluşturuluyor bunun sahipliğini neden unique_ptr ye veriyorsun ?
Multi thread kullanılmayan yerde mutex in getirdiği performans kaybını anlatmaya gerek bile yok.
Örnek kod double free hatasını açıkça görebilirsiniz (çift destructor)
Öğeyi görmek için üye olmalısınız.
- Katılım
- 16 Tem 2019
- Konular
- 715
- Mesajlar
- 3,551
- Çözüm
- 47
- Online süresi
- 6mo 20d
- Reaksiyon Skoru
- 2,110
- Altın Konu
- 34
- Başarım Puanı
- 309
- MmoLira
- 19,559
- DevLira
- 122
Kod:
#ifndef __INC_SINGLETON_H__
#define __INC_SINGLETON_H__
#include <assert.h>
template <typename T>
class singleton
{
protected:
static T* ms_singleton;
public:
singleton()
{
assert(!ms_singleton && "Singleton instance already exists.");
ms_singleton = static_cast<T*>(this);
}
virtual ~singleton()
{
assert(ms_singleton && "Singleton instance does not exist.");
ms_singleton = NULL;
}
static T& instance()
{
assert(ms_singleton && "Singleton instance is not created yet.");
return *ms_singleton;
}
static T* instance_ptr()
{
return ms_singleton;
}
};
template <typename T>
T* singleton<T>::ms_singleton = NULL;
#endif // __INC_SINGLETON_H__
Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)
Benzer konular
- Cevaplar
- 8
- Görüntüleme
- 223
- Cevaplar
- 18
- Görüntüleme
- 5K
- Cevaplar
- 8
- Görüntüleme
- 1K
- Cevaplar
- 37
- Görüntüleme
- 2K



ASD 



