import win.ui; import fonts.fontAwesome; /*DSG{{*/ var winform = win.form(cls="PING_FORM";text="PING测试";right=599;bottom=399;max=false;min=false) winform.add( listbox={cls="listbox";left=7;top=8;right=590;bottom=388;bgcolor=0xFFFFFF;db=1;dl=1;dr=1;dt=1;edge=1;items={};ownerDraw=1;z=1}; loading={cls="plus";left=461;top=298;right=552;bottom=372;bgcolor=0xFFFFFF;clipBk=false;font=LOGFONT(h=-29;name='FontAwesome');z=2} ) /*}}*/ //设定自绘每行的高度 winform.listbox.onMeasureItem = function(measureItem){ measureItem.itemHeight = winform.listbox.dpiScale(16); } //自绘列表项 winform.listbox.onDrawItem = function(drawItem){ var text = winform.listbox.getItemText( drawItem.itemID + 1 ) ::SetTextColor(drawItem.hDC,winform.listbox.ipColors[drawItem.itemID + 1] ); ::DrawText(drawItem.hDC,text,#text,drawItem.rcItem,0x20/*_DT_SINGLELINE*/); } winform.show(); winform.listbox.ipColors = {}; winform.listbox.addIp = function(clr,ip,label){ winform.listbox.add( ip + ": " + (label || "Failed") ) winform.listbox.ipColors[winform.listbox.count] = clr } //线程启动函数 var pingThread = function( ip,winform ) { import icmp.ping; //线程内使用的库必须在线程内导入 var ping = icmp.ping(); //创建 PING 工具(基于系统 API 函数 IcmpSendEcho ), for(i=1;4;1){ if( ping.perform(ip) ){ winform.listbox.addIp(0xF00,ip,string.format( "Reply from %s: bytes=%d time=%dms TTL=%d" , ping.ip , #ping.requestData , ping.echoReply.roundTripTime , ping.echoReply.options.ttl ) ); return ping.echoReply; //此返回值由 manage.waitClose 函数作为调用 onEnd 回调函数的 echoReply 参数。 } sleep(10) } winform.listbox.addIp(0x0f0,ip) } import thread.manage; manage = thread.manage(3) manage.createSuspended(pingThread,"www.example.com",winform).onEnd = function(echoReply){ //线程执行完回调此函数 } manage.createSuspended(pingThread,"www.aardio.com",winform).onEnd = function(echoReply){ //线程执行完回调此函数 } //在文本框右下角显示加载进度动画。 winform.loading.disabledText = {'\uF254';'\uF251';'\uF252';'\uF253';'\uF250'} manage.waitClose(); //等待所有线程结束,必须调用此函数才能在线程结束时触发前面指定的 onEnd 回调。 winform.loading.disabledText = null; win.loopMessage();