[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[其他] 多线程执行批处理脚本 cocmd 1.2

本帖最后由 Byaidu 于 2021-9-7 06:59 编辑

cocmd 工具通过在进程空间中加载多个 cmd.dll 实例实现了真正意义上的多线程执行批处理脚本

使用方法:cocmd [命令1] [命令2] ...

不同于 start /b 的多进程启动方式,因为环境变量和进程环境是绑定的,所以多个脚本线程间可以实时共享变量以及 GDI 句柄等资源

1.2 版本添加了线程锁机制并集成了 CAPIx 的强大功能

多线程机制可以很大程度上提升批处理脚本的可玩性

例如通过多线程机制可以实现一个简单的实时聊天室,网络通信、用户输入以及界面绘制等功能可以通过 CAPIx 实现,并借助 cocmd 分离到不同的线程执行,线程之间可以通过变量实时通讯而不会相互干扰

项目地址:https://github.com/Byaidu/cocmd

从你的下载点 测 V1.3

OS: Windows 7 X64 繁体中文版

运行 V1.3 内的 test.bat

A.
1.bat 并没得到正确的结果
title time:%time%(1.bat) a:%a%(2.bat) b:%b%(3.bat)

B.
仍然有错误

系统在 System 的讯息档中找不到讯息编号 0x8 的讯息文字。
3.bat 0
2.bat 0
系统在 System 的讯息档中找不到讯息编号 0x8 的讯息文字。
2.bat 1
系统在 System 的讯息档中找不到讯息编号 0x8 的讯息文字。
3.bat 1
系统在 System 的讯息档中找不到讯息编号 0x8 的讯息文字。
2.bat 2
系统在 System 的讯息档中找不到讯息编号 0x8 的讯息文字。
1.bat lock
3.bat 2
3.bat 3
3.bat 4
1.bat unlock
2.bat 4
系统在 System 的讯息档中找不到讯息编号 0x8 的讯息文字。
3.bat 5
2.bat 5
系统在 System 的讯息档中找不到讯息编号 0x8 的讯息文字。
系统在 System 的讯息档中找不到讯息编号 0x8 的讯息文字。
2.bat 6
系统在 System 的讯息档中找不到讯息编号 0x8 的讯息文字。
3.bat 6
系统在 System 的讯息档中找不到讯息编号 0x8 的讯息文字。
2.bat 7
系统在 System 的讯息档中找不到讯息编号 0x8 的讯息文字。
系统在 System 的讯息档中找不到讯息编号 0x8 的讯息文字。
3.bat 7
2.bat 8
系统在 System 的讯息档中找不到讯息编号 0x8 的讯息文字。
系统在 System 的讯息档中找不到讯息编号 0x8 的讯息文字。
2.bat 9
系统在 System 的讯息档中找不到讯息编号 0x8 的讯息文字。
3.bat 8
系统在 System 的讯息档中找不到讯息编号 0x8 的讯息文字。
2.bat 10
系统在 System 的讯息档中找不到讯息编号 0x8 的讯息文字。
系统在 System 的讯息档中找不到讯息编号 0x8 的讯息文字。
3.bat 9
2.bat 11
系统在 System 的讯息档中找不到讯息编号 0x8 的讯息文字。
系统在 System 的讯息档中找不到讯息编号 0x8 的讯息文字。
2.bat 12
系统在 System 的讯息档中找不到讯息编号 0x8 的讯息文字。
3.bat 10
系统在 System 的讯息档中找不到讯息编号 0x8 的讯息文字。
2.bat 13
系统在 System 的讯息档中找不到讯息编号 0x8 的讯息文字。
3.bat 11
系统在 System 的讯息档中找不到讯息编号 0x8 的讯息文字。
2.bat 14
系统在 System 的讯息档中找不到讯息编号 0x8 的讯息文字。
系统在 System 的讯息档中找不到讯息编号 0x8 的讯息文字。
2.bat 15

TOP

回复 2# peterboy666


我这里是 Windows 7 SP1 X64 简体中文,可以正确显示 title

TOP

TOP

回复 2# peterboy666


可能是系统版本问题导致 1.bat 没有正常启动

把 test.bat 的内容改成 cocmd "" "" test\1.bat test\2.bat test\3.bat 应该就可以了

TOP

本帖最后由 peterboy666 于 2021-9-7 16:37 编辑

回复 4# Byaidu

3F
>我这里是 Windows 7 SP1 X64 简体中文,可以正确显示 title
原来你运行也报错,
你要不要修一下.

4F
>https://github.com/Byaidu/cocmd/archive/refs/tags/v1.3.zip
比对  HASH 一模一样.

5F
>可能是系统版本问题导致 1.bat 没有正常启动
>把 test.bat 的内容改成 cocmd "" "" test\1.bat test\2.bat test\3.bat 应该就可以了
一样 1.bat 没正常启动
顯示
C:\windows\system32\cmd.exe - test\1.bat - test\2.bat - test\3.bat

TOP

回复 6# peterboy666


那个报错的问题好修,直接 hook 屏蔽掉 PutMsg 就可以

但是不能执行 title 就有点奇怪了,我这边没办法复现的话就不太好改,不过好像也不是什么大问题(

TOP

本帖最后由 Byaidu 于 2021-9-7 18:22 编辑

回复 6# peterboy666


github 上发布了 1.5 版本,现在应该没有报错了

TOP

本帖最后由 peterboy666 于 2021-9-7 19:03 编辑

回复 8# Byaidu



1.
已不报错.

2.
1.bat
title time:%time%(1.bat) a:%a%(2.bat) b:%b%(3.bat)
还是没有动作.

3.
我将
title time:%time%(1.bat) a:%a%(2.bat) b:%b%(3.bat)
改成
echo time:%time%(1.bat) a:%a%(2.bat) b:%b%(3.bat)
就有动作了.

4.
但运行结果,
只有 5 次 time,

只有 28 次 time,
之后就没有再出现 time 这很奇怪 ?

运行结果:

time:18:52:44.50(1.bat) a:0(2.bat) b:0(3.bat)
#2.bat 0
#3.bat 0
time:18:52:45.65(1.bat) a:1(2.bat) b:1(3.bat)
#2.bat 1
time:18:52:46.73(1.bat) a:2(2.bat) b:1(3.bat)
#3.bat 1
time:18:52:47.82(1.bat) a:2(2.bat) b:2(3.bat)
#2.bat 2
time:18:52:48.90(1.bat) a:3(2.bat) b:2(3.bat)
#1.bat lock
#3.bat 2
#3.bat 3
#3.bat 4
#1.bat unlock
#2.bat 4
#2.bat 5
#3.bat 5
#2.bat 6
#3.bat 6
#2.bat 7
#3.bat 7
#2.bat 8
#2.bat 9
#3.bat 8
#2.bat 10
#3.bat 9
#2.bat 11
#2.bat 12
#3.bat 10
#2.bat 13
#3.bat 11
#2.bat 14
#2.bat 15
#3.bat 12
#2.bat 16
#3.bat 13
#2.bat 17
#2.bat 18
#3.bat 14
#2.bat 19
#3.bat 15
#2.bat 20

TOP

回复 9# peterboy666


原生的 cmd 对并行操作支持不太好,有时候会把管道描述符卡错位导致不能正常输出,如果有输出字符的需求可以使用内置的 CAPIx 调用 WriteConsoleOutputCharacter 完成

TOP

返回列表