进程与线程之间的协调?

caijf 2002-12-10 04:25:08
我写了一段程序,是希望实现点击按钮后调用线程,然后线程调出一个form2来,在form2上进行一些自动操作,如打开olecontainer1,来连接word等。但是此时我的主form1就会停顿,一定要form2的操作完成后才能动。而我form2的一些操作可能需要一分钟才能完成,我当然不能让form1停这么久啦。我该怎么办阿,我调用线程用的是SYNCHRONIZE(BuildWord); 如果我把SYNCHRONIZE去掉,就会出错。请高手指导一下哦。
...全文
49 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
huang_gong 2002-12-12
  • 打赏
  • 举报
回复
个人觉得 :
程序启动时自动创建 from1,form2,此时不要初始化form2,把form2的初始化工作放到form1中调用的线程中(比如连接word等),不要使用Synchronize(记得这是在主线程中执行的)。使用一信号量,在线程初始化form2时不允许其余的程序访问form2,以便同步vcl。等到线程初始化结束后发送消息给form1,此时再激活form2.
caijf 2002-12-11
  • 打赏
  • 举报
回复
谁能告诉我阿,
caijf 2002-12-11
  • 打赏
  • 举报
回复
可问题是我是这么做的,写成一个Thread单元,然后调用。用了Synchronize(ThreadMothed),但是仍然是主窗口会停顿,一定要form2处理完了,form1才能恢复正常。
caijf 2002-12-11
  • 打赏
  • 举报
回复
有没有人能给我具体讲讲,我不是很明白。其实我程序的大部分功能都已完成,只是这主form的停顿估计是让用户无法接受的。
huang_gong 2002-12-11
  • 打赏
  • 举报
回复
呵呵,可能错了。我觉得你应该在线程中执行自动操作,等操作完毕发送消息给form1,此时再调用Form2。
huang_gong 2002-12-11
  • 打赏
  • 举报
回复
用信号同步试试。createmutex()
我记得Synchronize是在主线程中执行的?(这样的话在连接过程中主线程要等待?不知对不对)
stanely 2002-12-11
  • 打赏
  • 举报
回复
用消息通信,不要用synchronize
wjlsmail 2002-12-10
  • 打赏
  • 举报
回复
将Form2中的处理写成一个Thread单元
线程使用了外部Vcl资源要同步,可以用 Synchronize(ThreadMothed) (去掉后没有同步肯定出错了)

5,931

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧