找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
楼主: mdyblog

[更新376#2825]PECMD2012.1.80.13_Win32_64.多窗口多线程.裸机系统2.3.3.1+18M酷M...

   火... [复制链接]
发表于 2013-4-3 18:19:25 | 显示全部楼层
结果测试:calc #运行一次计算最少100us calc运行一次计算最少140us
回复

使用道具 举报

发表于 2013-4-3 18:28:16 | 显示全部楼层
现在实验了下好像原来的date获得的时间只要是刷新慢,精度基本上还是够的,刷新时间为1/64秒
回复

使用道具 举报

 楼主| 发表于 2013-4-3 18:39:38 | 显示全部楼层
原帖由 2011hwo1 于 2013-4-3 18:28 发表
现在实验了下好像原来的date获得的时间只要是刷新慢,精度基本上还是够的,刷新时间为1/64秒

“刷新慢” 是什么意思?  和精度 什么关系?
回复

使用道具 举报

发表于 2013-4-3 19:14:40 | 显示全部楼层
就是好像被系统限制了每秒去系统时间的次数一样,如果连续取系统时间就在一定时间内不更新取出来的时间,而返回原来的时间,导致精度表面上看起来精度不高,就是date 变量名 获得的时间都有同样的问题
回复

使用道具 举报

发表于 2013-4-3 19:16:42 | 显示全部楼层
曾经用易语言获得时间也有同样的问题,大概是那个函数只能在第一次刷新了后要等1/64秒才刷新吧
回复

使用道具 举报

 楼主| 发表于 2013-4-3 19:28:39 | 显示全部楼层
原帖由 2011hwo1 于 2013-4-3 19:14 发表
就是好像被系统限制了每秒去系统时间的次数一样,如果连续取系统时间就在一定时间内不更新取出来的时间,而返回原来的时间,导致精度表面上看起来精度不高,就是date 变量名 获得的时间都有同样的问题


这么说就是 精度了。
基本精度1T, 每N个T才更新一次, 那个这个 计时器的精度就是N*T.
回复

使用道具 举报

 楼主| 发表于 2013-4-3 19:35:14 | 显示全部楼层
原帖由 2011hwo1 于 2013-4-3 18:19 发表
结果测试:calc #运行一次计算最少100us calc运行一次计算最少140us

CALC #a=1 + 1**

11.20us

//上下面数字是12345 怎么半角的变成这个样? 坛子怎么了? 换成13456吧。
TEAM ENVI &&&ENVIMODE=1| ENVI &&&FORCELOCAL=1
TEAM  SET-def T1=| SET-def T2=| SET-def a=
DATE T1   utc
CALC #a=1 + 13456
CALC #a=1 + 13456
CALC #a=1 + 13456
CALC #a=1 + 13456
CALC #a=1 + 13456
CALC #a=1 + 13456
CALC #a=1 + 13456
CALC #a=1 + 13456
CALC #a=1 + 13456
CALC #a=1 + 13456
CALC #a=1 + 13456
CALC #a=1 + 13456
CALC #a=1 + 13456
CALC #a=1 + 13456
CALC #a=1 + 13456
CALC #a=1 + 13456
CALC #a=1 + 13456
CALC #a=1 + 13456
CALC #a=1 + 13456
CALC #a=1 + 13456
DATE T2   utc
CALC d=(%T2% - %T1%) / 20 / 10##02
MESS %d%us

//11.20us

[ 本帖最后由 mdyblog 于 2013-4-3 19:45 编辑 ]
回复

使用道具 举报

发表于 2013-4-3 19:47:15 | 显示全部楼层
精度和硬件时钟有关,非实时OS上的误差普遍比较大,Counter的精度在 windows 的应用来说够了,只是别拿 win 的机器去做精细的工业控制,一般的应用误差那么点点没有任何影响。
回复

使用道具 举报

发表于 2013-4-3 19:58:59 | 显示全部楼层
原帖由 mdyblog 于 2013-4-3 19:28 发表


这么说就是 精度了。
基本精度1T, 每N个T才更新一次, 那个这个 计时器的精度就是N*T.

那的确也应该是算是精度的问题,新版就好得多了
回复

使用道具 举报

 楼主| 发表于 2013-4-3 23:04:40 | 显示全部楼层
原帖由 527104427 于 2013-4-3 22:45 发表
请教一下老大:
C盘有一个批处理文件,C:\新建、&文件夹(4).bat
执行失败,要如何才能让它成功?
下面这句则可以:
  1. PECMD.EXE "LINK %%SendTo%%\test,%~f0,,shell32.dll#4"
  2. pause
复制代码

PECMD 有逗号分割的命令, 文件名都不需引号。
CMD 中碰到特殊字符, 可以将整个PECMD 命令 用引号 刮起来。 PECMD 执行前会先脱去引号。



FILE 命令最近改了, 有引号也没问题。
回复

使用道具 举报

 楼主| 发表于 2013-4-4 00:00:17 | 显示全部楼层
原帖由 527104427 于 2013-4-3 23:24 发表
多谢老大指点,这句成功了:


但是,下面这句失败:


改回原来那种写法就没有问题:

两种方法重复了。

PECMD.EXE "FILE %~f0=>d:\%~nx0"

PECMD.EXE FILE %~f0=^>d:\%~nx0
回复

使用道具 举报

 楼主| 发表于 2013-4-4 00:13:37 | 显示全部楼层
原帖由 527104427 于 2013-4-3 23:47 发表
另外,百分号怎么写进注册表呢?
实际上,HKCR\*\shell\expcab\command的值写错了,变成这样:
我的期望值是:
  1. PECMD.EXE REGI HKCR\*\shell\expcab\command\="%~f0" "%%%%1"
复制代码

PECMD2012 %1 会被解释的第一个参数REGI。 % 用%%表示。

CMD  解释"%%%%1" 为 "%%1"
PECMD2012 再解释为 "%1"
回复

使用道具 举报

发表于 2013-4-4 07:38:03 | 显示全部楼层
消息号以#开头为PECMD应用自定义消息1-N。wPrm lPrm参数名, 参数名可以被引用。等号后的_表示下半部响应模式,在系统响应之后响应【对衍生消息会以相反的顺序响应】。 上面;可以用逗号。      消息参数可以是数字,@PE变量名(ENVI$# 填充非字符串对象),$字符串(只SENDMSG)。

字符串消息参数怎么使用?
回复

使用道具 举报

发表于 2013-4-4 09:01:10 | 显示全部楼层
PINT XXX,StartMenu 命令对 Win8PE 不起作用吗?无法将快捷方式添加到开始菜单的列表?
回复

使用道具 举报

 楼主| 发表于 2013-4-4 09:52:58 | 显示全部楼层
原帖由 2010qaqz111 于 2013-4-4 09:01 发表
PINT XXX,StartMenu 命令对 Win8PE 不起作用吗?无法将快捷方式添加到开始菜单的列表?

WIN8 没有开始菜单。
都是自己 弄的, 没有 统一的标准, 也没有好的接口。
4.0 也没办法。

[ 本帖最后由 mdyblog 于 2013-4-4 11:23 编辑 ]
回复

使用道具 举报

发表于 2013-4-4 10:06:29 | 显示全部楼层
原帖由 <i>mdyblog</i> 于 2013-4-4 09:52 发表 <a href="http://bbs.wuyou.net/redirect.php?goto=findpost&pid=2737616&ptid=205402" target="_blank"><img src="http://bbs.wuyou.net/images/common/back.gif" border="0" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onmouseover="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onclick="if(!this.resized) {return true;} else {window.open(this.src);}" onmousewheel="return imgzoom(this);" alt="" /></a><br />

<br />
WIN8 没有开始菜单。 <br />
都是自己 弄的, 没有 统一的标准, 也没有好的借口。 <br />
4.0 也没办法。
<br />
那就没办法了,手动吧。晕死了。

PS.话说为毛用chrome上论坛引用就出一堆乱码,什么时候论坛能改进一下支持chrome啊-_-b
回复

使用道具 举报

发表于 2013-4-4 10:46:48 | 显示全部楼层
原帖由 2010qaqz111 于 2013-4-4 10:06 发表

那就没办法了,手动吧。晕死了。

PS.话说为毛用chrome上论坛引用就出一堆乱码,什么时候论坛能改进一下支持chrome啊-_-b

点控制面板  编辑个人资料   编辑器模式 修改下
1.JPG
回复

使用道具 举报

 楼主| 发表于 2013-4-4 10:53:51 | 显示全部楼层
原帖由 2011hwo1 于 2013-4-4 07:38 发表
消息号以#开头为PECMD应用自定义消息1-N。wPrm lPrm参数名, 参数名可以被引用。等号后的_表示下半部响应模式,在系统响应之后响应【对衍生消息会以相反的顺序响应】。 上面;可以用逗号。      消息参数可以是数 ...


发送字符串消息.WCS(包内有):
TEAM ENVI^ ENVIMODE=1| ENVI^ FORCELOCAL=1

WIN1
_SUB WIN1,W289H249,新窗口1,
    SET-def  WID=%__WinID%
    ENVI @this.MSG=#1::&&wp,&&lp, CALL OnMSG1  
    SET &str[1]=Line2222--A  //共享变量数组
    SET &str[2]=abc22222--A  //共享变量数组
    ENVI @this.SENDMSG=#1;1;2      //方法1.1  一般建议方法1.X,利用共享变量
    ENVI @this.POSTMSG=#1;1;2      //方法1.1
    ENVI @@SENDMSG=%WID%:#1;1;2    //方法1.3
    ENVI @@POSTMSG=%WID%:#1;1;2    //方法1.4

    SET &str1=Line2222--B
    SET &str2=abc22222--B

    ENVI @this.MSG=#2::&&wp,&&lp, CALL OnMSG2  
    ENVI @@SENDMSG=%WID%:#2;@str1;@str2                //方法2.2   没写好容易 崩溃的!!!! 一般只用SENDMSG
    ENVI @@SENDMSG=%&WID%:#2;$Line1111--B;$abc111--B   //方法3.2  .没写好容易 崩溃的!!!! 只能SENDMSG

/////////////////
    ENVI @this.SENDMSG=#2;@str1;@str2                  //方法2.1 .没写好容易 崩溃的!!!! 一般只用SENDMSG
   
ENVI @this.SENDMSG=#2;$Line1111--B;$abc111--B      //方法3.1 .没写好容易 崩溃的!!!! 只能SENDMSG

_END

_SUB OnMSG1  
    SET~   &wpstr=str[%&wp%]    //取共享变量
    SET~   &lpstr=str[%&lp%]
    MESS. [%&wpstr%]  [%&lpstr%]
_END

_SUB OnMSG2  
    SET-make  &wpstr=%&wp%
    SET-make  &lpstr=%&lp%
    MESS. [%&wpstr%]  [%&lpstr%]
_END
  





[ 本帖最后由 mdyblog 于 2013-4-4 16:24 编辑 ]
回复

使用道具 举报

发表于 2013-4-4 16:30:02 | 显示全部楼层
原帖由 mdyblog 于 2013-4-4 10:53 发表


发送字符串消息.WCS(包内有):
TEAM ENVI^ ENVIMODE=1| ENVI^ FORCELOCAL=1

WIN1
_SUB WIN1,W289H249,新窗口1,
    SET-def  WID=%__WinID%
    ENVI @this.MSG=#1::&&wp,&&lp, CALL OnMSG1  
   ...

明白了,是ENVI @@SENDMSG=%WID%:#2;@str1;@str2传变量str1和str2的地址,然后用SET-make  &wpstr=%&wp%来取出来是吧.
或者ENVI @@SENDMSG=%&WID%:#2;$Line1111--B;$abc111--B传字符串Line1111--B和abc111--B的地址,然后用SET-make  &wpstr=%&wp%来取出来是.
ENVI @this.SENDMSG=#2;@str1;@str2
ENVI @this.SENDMSG=#2;$Line1111--B;$abc111--B 试了下无法传地址,所以这个命令失败.

也可以envi-addr &a=&str1来获得pe变量str1的地址,然后来传地址,这样就可以用多种消息发送命令来传址,然后envi-make来取字符串了
回复

使用道具 举报

发表于 2013-4-4 16:40:20 | 显示全部楼层
ENVI-make  PE变量名=[地址][;
  • [字节长度]]   //根据内存地址,长度 创建PE变量。*为char串
    我觉得应该改为:
    ENVI-make  PE变量名=[地址][;
  • [字节长度]]   //根据内存地址,长度返回字符串。*为char串
    这样比较准确

    [ 本帖最后由 2011hwo1 于 2013-4-4 16:41 编辑 ]
  • 回复

    使用道具 举报

     楼主| 发表于 2013-4-4 16:48:35 | 显示全部楼层
    原帖由 2011hwo1 于 2013-4-4 16:30 发表

    明白了,是ENVI @@SENDMSG=%WID%:#2;@str1;@str2传变量str1和str2的地址,然后用SET-make  &wpstr=%&wp%来取出来是吧.
    或者ENVI @@SENDMSG=%&WID%:#2;$Line1111--B;$abc111--B传字符串Line1111--B和abc111--B的 ...

    是的。


    1. /////////////////
    2. ENVI @this.SENDMSG=#2;@str1;@str2 //方法2.1 .没写好容易 崩溃的!!!! 一般只用SENDMSG
    3. ENVI @this.SENDMSG=#2;$Line1111--B;$abc111--B //方法3.1 .没写好容易 崩溃的!!!! 只能SENDMSG
    复制代码

    这两个药最新版, 所以分隔了一下。
    回复

    使用道具 举报

    发表于 2013-4-4 16:48:45 | 显示全部楼层
    原来字符串只能ENVI @@SENDMSG=参考号:消息号;[@pe变量名[$字符串]];[@pe变量名[$字符串]]
    来传址,用envi-make pe变量名=pe变量地址名来得到字符串
    回复

    使用道具 举报

     楼主| 发表于 2013-4-4 16:59:10 | 显示全部楼层
    原帖由 2011hwo1 于 2013-4-4 16:40 发表
    ENVI-make  PE变量名=[地址][;[字节长度]]   //根据内存地址,长度 创建PE变量。*为char串
    我觉得应该改为:
    ENVI-make  PE变量名=[地址][;
    [字节长度]]   //根据内存地址,长度返回字符串。*为char串
    ...


    ENVI-make PE变量名= 地址; 字节长度   //根据内存地址,和长度  创建PE对象(含字符串)。
    ENVI-make PE变量名= 地址             //根据内存地址 创建PE字符串。 地址是一个以宽字符0结尾的宽字符串
    ENVI-make PE变量名= 地址;*           //根据内存地址 创建PE对象(ANSI字符串)。 地址是一个以ANSI字符0结尾的ANSI字符串

    是创建新PE对象,拷贝其内容。
    回复

    使用道具 举报

    发表于 2013-4-4 17:00:22 | 显示全部楼层
    原帖由 mdyblog 于 2013-4-4 16:48 发表

    是的。

    /////////////////
    ENVI @this.SENDMSG=#2;@str1;@str2 //方法2.1 .没写好容易 崩溃的!!!! 一般只用SENDMSG
    ENVI @this.SENDMSG=#2;$Line1111--B;$abc111--B //方法3.1 .没写好容易 崩溃的! ...

    不错哈,又出新版了,哈哈,你简直是太勤奋了!!
    回复

    使用道具 举报

     楼主| 发表于 2013-4-4 17:01:18 | 显示全部楼层
    原帖由 2011hwo1 于 2013-4-4 16:48 发表
    原来字符串只能ENVI @@SENDMSG=参考号:消息号;[@pe变量名[$字符串]];[@pe变量名[$字符串]]
    来传址,用envi-make pe变量名=pe变量地址名来得到字符串


    是的, WINDOWS 的消息机制, 传递的都是2个 整数(含地址)。 接收方 再进一步处理成其它数据。
    回复

    使用道具 举报

     楼主| 发表于 2013-4-4 17:04:44 | 显示全部楼层
    原帖由 2011hwo1 于 2013-4-4 17:00 发表

    不错哈,又出新版了,哈哈,你简直是太勤奋了!!


    传递字符串, 除了方法1, 不要用POSTMSG。 否则程序容易崩溃(收到时数据已经无效)。
    如果用到LOCK, SENDMSG 前不能是加锁状态,否则程序容易死锁。

    [ 本帖最后由 mdyblog 于 2013-4-4 17:09 编辑 ]
    回复

    使用道具 举报

     楼主| 发表于 2013-4-4 17:22:38 | 显示全部楼层
    原帖由 mdyblog 于 2013-4-4 17:04 发表
    传递字符串, 除了方法1, 不要用POSTMSG。 否则程序容易崩溃(收到时数据已经无效)。
    如果用到LOCK, SENDMSG 前不能是加锁状态,否则程序容易死锁。

    跨进程 传递数据 需要 WM_COPYDATA 消息:
    COPYDATASTRUCT cp;
    cp.dwData = 0;
    cp.cbData = length;       //字节数
    cp.lpData = (void*)data;  //内存首值
    ::SendMessage(hWnd, WM_COPYDATA, NULL, (LPARAM)&cp);


    struct COPYDATASTRUCT
    {
       DWORD  dwData; //自定义数据
       DWORD  cbData; //字节数
       LPVOID lpData; //内存首值
    };

    回复

    使用道具 举报

     楼主| 发表于 2013-4-4 20:50:30 | 显示全部楼层
    PECMD2012.1.75.1-130314-36.多窗口线程孵化版_win32_64.sfx
    增加 ENVI-mkdummy

    ┃ENVI-make  PE变量名=[地址][;*】[字节长度]]   //根据内存地址,长度 创建PE变量。*为char串 ┃
    ┃ENVI-mkdummy  PE变量名=[地址][;*】[字节数]] //同-make,但只利用原内存创建dummy对象,不能修改┃

    ENVI-mkdummy  和  ENVI-make 类似。 但是, 它不重新申请一段内存, 而是利用原有内存。Copy-On-Write 技术:修改时才拷贝。

    主要是为了大内存时提高效率, 不用大内存的拷贝。 一般不要用。
       一般, 大内存用共享变量; 小变量可以拷贝没效率问题。


    [ 本帖最后由 mdyblog 于 2013-4-4 23:31 编辑 ]
    回复

    使用道具 举报

    发表于 2013-4-5 00:30:36 | 显示全部楼层
    lambda 函数能够换行吗?比如这样:

    TIME * TimerDetectWiFi,1000,[]{
       XXX
       XXXX
    }

    或者这样:
    lambda 函数能够换行吗?比如这样:

    TIME * TimerDetectWiFi,1000,[]
    {
       XXX
       XXXX
    }


    我用代码实际测试好像不行?

    另外定时器事件是阻塞的吗?
    回复

    使用道具 举报

     楼主| 发表于 2013-4-5 01:01:50 | 显示全部楼层
    原帖由 2010qaqz111 于 2013-4-5 00:30 发表
    lambda 函数能够换行吗?比如这样:
    或者这样:
    lambda 函数能够换行吗?比如这样:
    我用代码实际测试好像不行?
    另外定时器事件是阻塞的吗?


    [] 11 bb cc dd ee {
       MESS 1: %*  @# OK
       MESS 2: %*  @# OK
    }
      



    哦! TIME  只能单行!!     TIME 不支持 lambda 函数体, 只支持 命令。

    { 必须在第一行。 LAMBDA 本来就是行式函数, 一般都在同一行。 同时, 用以确定 参数表的束  

    定时器事件是阻塞的.

    [ 本帖最后由 mdyblog 于 2013-4-5 01:16 编辑 ]
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1|闽公网安备35020302032614号 )

    GMT+8, 2026-9-10 20:35

    Powered by Discuz! X5.0

    © 2001-2026 Discuz! Team.

    快速回复 返回顶部 返回列表