TC官方合作论坛

 找回密码
 立即注册
查看: 1652|回复: 12
打印 上一主题 下一主题

[问题] 函数直接调用问题

[复制链接]
跳转到指定楼层
楼主
发表于 2014-7-9 22:04:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上加入TC

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

x
先上测试例子:
  1. 空间 线程测试
  2. //默认空间
  3. 线程句柄

  4. 功能 线程A()
  5.         help.messagebox("A1")
  6.         线程测试.线程B()
  7.         help.messagebox("A2")
  8. 功能结束

  9. 功能 线程B()
  10.         help.messagebox("B1")
  11.         //线程测试.线程C()
  12.         help.messagebox("B2")
  13. 功能结束

  14. 功能 线程C()
  15.         help.messagebox("C1")
  16.         //线程测试.线程A()
  17.         help.messagebox("C2")
  18. 功能结束

  19. //开始按钮_点击操作
  20. 功能 开始_点击()
  21.         线程句柄=线程.开启("线程测试.线程A","")

  22. 功能结束

  23. //退出按钮_点击操作
  24. 功能 退出_点击()
  25.         线程.关闭(线程句柄)

  26.         辅助.退出()
  27. 功能结束

  28. 空间结束
  29. //空间结束语句
复制代码
上面是循环从A-C,只能执行输出带1的
如果说我从测试线程A到测试线程B,假如我测试线程B中没有调用C的函数,那么我是测试B运行完之后,函数测试A再继续输出A2。那么我在想,现在我这样子调用,测试A、B、C中是不是有很多线程处于等待状态,我怎么样子才能将输出带2的那些内存释放掉?
回复

使用道具 举报

沙发
 楼主| 发表于 2014-7-9 22:08:04 | 只看该作者
自己先顶个
回复 支持 反对

使用道具 举报

板凳
 楼主| 发表于 2014-7-9 22:46:50 | 只看该作者
就没人看么
回复 支持 反对

使用道具 举报

地板
 楼主| 发表于 2014-7-10 00:04:12 | 只看该作者
来个人
回复

使用道具 举报

5#
发表于 2014-7-10 08:54:11 | 只看该作者
新人来学习
回复 支持 反对

使用道具 举报

6#
 楼主| 发表于 2014-7-10 11:01:38 | 只看该作者
回复 支持 反对

使用道具 举报

7#
发表于 2014-7-10 11:18:14 | 只看该作者
首先,你上面的例子看不来主要解决哪一类型的问题!
其次,你这是不科学的调用。

类似:
死循环没有退出标识,
死递归,永远在调用自己没退出。

A中间调用B,B中间调用C,C中间调用A。。。你的每条线程后半段。都没执行。而且还在不停的启动A,B,C三类线程。如果没有sleep我想很快会死。
    当然。如有sleep.你放久了。内在也会不够了用。不信。你试试!
回复 支持 反对

使用道具 举报

8#
 楼主| 发表于 2014-7-10 11:45:22 | 只看该作者
B哥 发表于 2014-7-10 11:18
首先,你上面的例子看不来主要解决哪一类型的问题!
其次,你这是不科学的调用。

恩,我就是想要知道这个问题怎么解决,无限调用的话肯定会内存不够。
好比说,我现在就只有A线程和B线程,我A中调用B,B中调用A,也就是说是无限循环显示"A1"和"B1",那么如何才能让我在调用线程B的时候将线程A给杀死呢?也就是线程B被调用后,即使线程B不调用线程A,线程A也不会显示"A2"
麻烦解答下,非常感谢!
回复 支持 反对

使用道具 举报

9#
发表于 2014-7-10 16:22:32 | 只看该作者
1774322927 发表于 2014-7-10 11:45
恩,我就是想要知道这个问题怎么解决,无限调用的话肯定会内存不够。
好比说,我现在就只有A线程和B线程 ...

给你换种形式写下一这段代码给你看下你就知道你错在哪里了
while(true)
help.messagebox("A1")
help.messagebox("B1")
help.messagebox("C1")
endwhile


while(true)
help.messagebox("A2")
help.messagebox("B2")
help.messagebox("C2")
endwhile
请问你写这样的代码怎么执行到下一个while呢后面的就是废代码了
回复 支持 反对

使用道具 举报

10#
发表于 2014-7-10 16:35:36 | 只看该作者
  1. 功能 开始_点击()
  2. //不知道你要干什么,这么写有什么意义?还是给你写一个
  3.     句柄A=线程.开启("线程测试.线程A","")
  4.     句柄B=线程.开启("线程测试.线程B","")
  5. 功能结束

  6. 功能 打印(s)
  7. 对象句柄=线程.创建临界区()
  8. 线程.进入临界区(对象句柄)
  9. help.messagebox(s)
  10. 线程.离开临界区(对象句柄)
  11. 线程.删除临界区(对象句柄)
  12. //详细使用方法参见帮助文档  

  13. 功能结束

  14. 功能 线程A()
  15.    
  16.     while(true)
  17.         线程测试.打印("A")
  18.         help.sleep(1000)
  19.     endwhile
  20. 功能结束

  21. 功能 线程B()
  22.    
  23.    while(true)
  24.        线程测试.打印("B")
  25.         help.sleep(1000)
  26.     endwhile
  27. 功能结束
复制代码
回复 支持 反对

使用道具 举报

*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /2 下一条

关闭

小黑屋|TC官方合作论坛 (苏ICP备18043773号

GMT+8, 2025-9-26 09:23 , Processed in 0.174994 second(s), 23 queries .

Powered by 海安天坑软件科技有限公司

© 2001-2013 Comsenz Inc.

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