Вы могли бы хотеть смотреть на Dan Kegel" проблема C10K " веб-страница об обработке нескольких источников/приемников данных.
В основном лучше использовать минимальные потоки, которые в сокетах могут быть сделаны в w/большей части ОС некоторая система событий (или асинхронно в Windows с помощью IOCP).
то, Когда Вы сталкиваетесь со случаем, где ОС и/или библиотеки не предлагают способ выполнить коммуникацию не блокирующимся способом, лучше использовать пул потоков для обработки их при сообщении тому же циклу событий.
схема В качестве примера расположения:
Per CPU [*] EVENTLOOP ------ Handles nonblocking I/O using OS/library utilities
| \___ Threadpool for various blocking events
Threadpool for handling the I/O messages that would take long
Если вы имеете в виду, если у объекта нет свойств:
var isEmpty:Boolean = true;
for (var n in obj) { isEmpty = false; break; }
Это серьезный прием, но вы можете использовать:
Object.prototype.isEmpty = function():Boolean {
for(var i in this)
if(i != "isEmpty")
return false
return true
}
var p = {};
trace(p.isEmpty()); // true
var p2 = {a:1}
trace(p2.isEmpty()); // false
Зависит от вашего объекта или, скорее, от того, что вы ожидаете от него. Например, если ваш объект должен содержать какое-то свойство с именем name, которое вы ищете, вы можете сделать
if(objSomeItem == null || objSomeItem.name == null || objSomeItem.name.length == 0)
{
trace("object is empty");
}
или если ваш объект действительно должен быть чем-то другим, например массивом, который вы могли бы сделать
var arySomeItems = objSomeItem as Array;
if(objSomeItem == null || arySomeItems == null || arySomeItems.length == 0)
{
trace("object is empty");
}
Вы также можете использовать другие способы через отражение, такие как ObjectUtil.getClassInfo, а затем перечисление свойств для проверки установленных значений .... справка по этому классу:
import flash.utils.describeType;
import flash.utils.getDefinitionByName;
public class ReflectionUtils
{
/** Returns an Array of All Properties of the supplied object */
public static function GetVariableNames(objItem:Object):Array
{
var xmlPropsList:XMLList = describeType(objItem)..variable;
var aryVariables:Array = new Array();
if (xmlPropsList != null)
{
for (var i:int; i < xmlPropsList.length(); i++)
{
aryVariables.push(xmlPropsList[i].@name);
}
}
return aryVariables;
}
/** Returns the Strongly Typed class of the specified library item */
public static function GetClassByName($sLinkageName:String):Class
{
var tObject:Class = getDefinitionByName($sLinkageName) as Class;
return tObject;
}
/** Constructs an instance of the speicified library item */
public static function ConstructClassByName($sLinkageName:String):Object
{
var tObject:Class = GetClassByName($sLinkageName);
//trace("Found Class: " + tMCDefinition);
var objItem:* = new tObject();
return objItem;
}
public static function DumpObject(sItemName:String, objItem:Object):void
{
trace("*********** Object Dump: " + sItemName + " ***************");
for (var sKey:String in objItem)
{
trace(" " + sKey +": " + objItem[sKey]);
}
}
//}
}
Еще одна вещь, на которую следует обратить внимание: вы можете использовать простой цикл for для проверки свойств объекта , вот что делает эта функция dumpobject.
Вы также можете попробовать:
ObjectUtil.getClassInfo(obj).properties.length > 0
Хорошо то, что getClassInfo дает вам гораздо больше информации об объекте, например. вы получаете имена всех свойств объекта, которые могут пригодиться.
можно использовать метод hasProperty для проверки длины
var i:int = myObject.hasProperty("length") ? myObject.length: 0;