예제 #1
0
    public void destroyClassReally(IClassObject classObject)
    {
        if (!isMainThread())
        {
            logError("只能在主线程中使用ClassPool,子线程中请使用ClassPoolThread代替");
            return;
        }
        bool inuse = isInuse(classObject);

        classObject.resetProperty();
        classObject.setDestroy(true);
        // 从已使用列表中移除
        if (inuse)
        {
            removeInuse(classObject);
        }
        // 从未使用列表中移除
        else
        {
            if (mUnusedList.TryGetValue(classObject.GetType(), out HashSet <IClassObject> list) && list.Count > 0)
            {
                list.Remove(classObject);
            }
        }
    }
예제 #2
0
    // 返回值表示是否是new出来的对象,false则为从回收列表中重复使用的对象
    public IClassObject newClass(out bool isNewObject)
    {
        mListLock.waitForUnlock();
        isNewObject = false;
        IClassObject obj = null;

        // 先从未使用的列表中查找是否有可用的对象
        if (mUnusedList.Count > 0)
        {
            foreach (var item in mUnusedList)
            {
                obj = item;
                break;
            }
            mUnusedList.Remove(obj);
        }
        // 未使用列表中没有,创建一个新的
        else
        {
            obj = createInstance <IClassObject>(mType);
            // 创建实例时重置是为了与后续复用的实例状态保持一致
            obj.resetProperty();
            isNewObject = true;
        }
        obj.setAssignID(++mAssignIDSeed);
        obj.setDestroy(false);
        // 添加到已使用列表
        mInusedList.Add(obj);
        mListLock.unlock();
        return(obj);
    }
예제 #3
0
 public void destroyClass(IClassObject classObject)
 {
     if (!isMainThread())
     {
         logError("只能在主线程中使用ClassPool,子线程中请使用ClassPoolThread代替");
         return;
     }
     classObject.resetProperty();
     classObject.setDestroy(true);
     addUnuse(classObject);
     removeInuse(classObject);
 }
예제 #4
0
 public void destroyClass(IClassObject classObject)
 {
     mListLock.waitForUnlock();
     classObject.resetProperty();
     classObject.setDestroy(true);
     // 加入未使用列表
     if (!mUnusedList.Add(classObject))
     {
         logError("对象已经在未使用列表中,无法再次销毁! Type: " + mType);
     }
     // 从使用列表移除,要确保操作的都是从本类创建的实例
     if (!mInusedList.Remove(classObject))
     {
         logError("从未使用列表中移除失败! Type: " + mType);
     }
     mListLock.unlock();
 }
예제 #5
0
    // 返回值表示是否是new出来的对象,false则为从回收列表中重复使用的对象
    public IClassObject newClass(Type type, out bool isNewObject)
    {
        isNewObject = false;
        if (!isMainThread())
        {
            logError("只能在主线程中使用此对象池,子线程中请使用ClassPoolThread代替");
            return(null);
        }
        if (type == null)
        {
            return(null);
        }
        IClassObject obj = null;

        // 先从未使用的列表中查找是否有可用的对象
        if (mUnusedList.TryGetValue(type, out HashSet <IClassObject> classList) && classList.Count > 0)
        {
            foreach (var item in classList)
            {
                obj = item;
                break;
            }
            classList.Remove(obj);
            isNewObject = false;
        }
        // 未使用列表中没有,创建一个新的
        else
        {
            obj = createInstance <IClassObject>(type);
            // 创建实例时重置是为了与后续复用的实例状态保持一致
            obj.resetProperty();
            isNewObject = true;
        }
        obj.setAssignID(++mAssignIDSeed);
        obj.setDestroy(false);
        // 添加到已使用列表
        addInuse(obj);
        return(obj);
    }
예제 #6
0
    public void destroyClassReally(IClassObject classObject)
    {
        bool inuse = isInuse(classObject);

        mListLock.waitForUnlock();
        classObject.resetProperty();
        classObject.setDestroy(true);
        // 从已使用列表中移除
        if (inuse)
        {
            // 从使用列表移除,要确保操作的都是从本类创建的实例
            if (!mInusedList.Remove(classObject))
            {
                logError("在未使用列表中找不到对象! Type: " + mType);
            }
        }
        // 从未使用列表中移除
        else
        {
            mUnusedList.Remove(classObject);
        }
        mListLock.unlock();
    }