找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2157|回复: 11

[求助]:如何实现命令的同步执行

[复制链接]
发表于 2004-10-13 22:55:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
当前,我想用程序控制CAD打开一个文件,等文件打开完毕后执行一些操作:
acedCommand(RTSTR,"_open",RTSTR,filename,0);
my_calls();
可是问题在于acedCommand的执行是异步的,也就是说,此函数只是把命令发给CAD后就直接返回了,而不等命令执行完毕后才返回,所以造成了调用my_calls()时所发命令可能还没执行,那末程序逻辑也就乱套了;当然,sendStringToExecute也是一样。
所以,请教各位,在ARX编程中,有没有办法让程序所发的命令以同步方式执行,即所发命令执行完毕后才能返回,并且控制权要交回ARX程序?
请大家以 _open 命令为例,说明一下此问题的解决办法。
先谢了!!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-10-13 23:00:04 | 显示全部楼层
用acedInvoke试试吧,可能不好用
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-10-13 23:13:46 | 显示全部楼层
非常感谢,只不过文档中没说它是同步的还是异步的,我得试一下!而且,文档说它主要用于调用其它ARX程序定义的函数,但没说不能调用CAD内部命令。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-10-14 22:45:22 | 显示全部楼层
建立一个临时的EditorReactor,  应该可以确保 acadCommand( ..._Open...) 之后 调用 my_calls(),
之后,销毁临时的EditorReactor。比较麻烦,也需要小心。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-10-15 16:48:51 | 显示全部楼层
非常感谢,我会试一下!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-10-27 14:27:54 | 显示全部楼层
試的結果怎麼樣呀??
這個問題也是我一直困惑的問題,其實我的理解到不是你那樣的.
我認為命令是存在命令棧中的,要當前命令執行完後才執行你發送的命令,
所以我認為在你的例子中save一定後做,而不是你說的"所发命令可能还没执行",
事實是不是這樣,大家探討一下.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-10-28 01:16:11 | 显示全部楼层
哪个问题已经研究通了,发命令前:
1、设置目标文档为当前文档并激活它
2、锁定目标文档
3、禁止文档切换
这样,发的命令序列就会直接执行而不会挂起等到有机会了在执行。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-10-28 08:04:14 | 显示全部楼层
void inline setCommandtoACAD(const char *pcommand)
{
        AcApDocument* pAcTargetDocument = NULL;
        pAcTargetDocument = acDocManager->curDocument();

        acDocManager->activateDocument(pAcTargetDocument);
        acDocManager->lockDocument(pAcTargetDocument);
//中間還差什麼?
        acDocManager->sendStringToExecute(pAcTargetDocument,pcommand,false);
        acDocManager->unlockDocument(pAcTargetDocument);
}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-11-10 17:37:08 | 显示全部楼层
AcEditorReactor这个反映器里面的commandEnded可以得到你所调用命令后的消息
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-11-23 11:06:31 | 显示全部楼层
根据思路解决问题,非常感谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-11-23 11:21:22 | 显示全部楼层
当dwg文件很大时,需要这样处理
谢谢楼上各位
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-12-28 11:16:50 | 显示全部楼层
顶楼楼主: 就模仿cad的“打开文件”问题,综合你们的经验如下写了,但没有效果啊。
帮我看看怎么回事?

                        AcApDocument* pAcTargetDocument = NULL;
                        pAcTargetDocument = acDocManager->curDocument();

                        acDocManager->activateDocument(pAcTargetDocument);
                        acDocManager->lockDocument(pAcTargetDocument);

                        acDocManager->disableDocumentActivation();

                        tmpStr.Format("open %s",fileName);
                        es = acDocManager->sendStringToExecute(pAcTargetDocument, tmpStr, false, false);
                       
//                        acedCommand(RTSTR,"_open",RTSTR,fileName,0);

                        acDocManager->unlockDocument(pAcTargetDocument);
                        acDocManager->enableDocumentActivation();
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-16 07:02 , Processed in 0.270144 second(s), 53 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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