TC官方合作论坛

标题: 函数直接调用问题 [打印本页]

作者: 1774322927    时间: 2014-7-9 22:04
标题: 函数直接调用问题
先上测试例子:
  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的那些内存释放掉?

作者: 1774322927    时间: 2014-7-9 22:08
自己先顶个
作者: 1774322927    时间: 2014-7-9 22:46
就没人看么
作者: 1774322927    时间: 2014-7-10 00:04
来个人
作者: shl    时间: 2014-7-10 08:54
新人来学习
作者: 1774322927    时间: 2014-7-10 11:01

作者: B哥    时间: 2014-7-10 11:18
首先,你上面的例子看不来主要解决哪一类型的问题!
其次,你这是不科学的调用。

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

A中间调用B,B中间调用C,C中间调用A。。。你的每条线程后半段。都没执行。而且还在不停的启动A,B,C三类线程。如果没有sleep我想很快会死。
    当然。如有sleep.你放久了。内在也会不够了用。不信。你试试!
作者: 1774322927    时间: 2014-7-10 11:45
B哥 发表于 2014-7-10 11:18
首先,你上面的例子看不来主要解决哪一类型的问题!
其次,你这是不科学的调用。

恩,我就是想要知道这个问题怎么解决,无限调用的话肯定会内存不够。
好比说,我现在就只有A线程和B线程,我A中调用B,B中调用A,也就是说是无限循环显示"A1"和"B1",那么如何才能让我在调用线程B的时候将线程A给杀死呢?也就是线程B被调用后,即使线程B不调用线程A,线程A也不会显示"A2"
麻烦解答下,非常感谢!
作者: 一只熊    时间: 2014-7-10 16:22
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呢后面的就是废代码了
作者: 一只熊    时间: 2014-7-10 16:35
  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. 功能结束
复制代码

作者: 1774322927    时间: 2014-7-10 17:54
标题: RE: 函数直接调用问题
本帖最后由 1774322927 于 2014-7-10 18:02 编辑
一只熊 发表于 2014-7-10 16:22
给你换种形式写下一这段代码给你看下你就知道你错在哪里了
while(true)
help.messagebox("A1")

我知道,下面的那些A2,B2,C2的都是废代码。我的意思是,既然下面的是废代码,那就不需要了,但是线程应该还在那个点等着,我要的就是如何将这些废的等待中的线程给杀死掉。
作者: 1774322927    时间: 2014-7-10 18:01
标题: RE: 函数直接调用问题
一只熊 发表于 2014-7-10 16:35

谢谢这么仔细的回答。
我想要的其实不是多线程同时进行,我要的就是A线程调用B线程后,A线程下面的语句直接被停止,而不是等B线程运行完之后继续进行A线程(当然,B线程不是像我例子上面的,是一次就能完成的那种)。
同样的,如果ABC三个线程,我想要的是A线程调用B线程后A线程杀死,B线程运行,B线程调用C线程后,B线程杀死,C线程运行。。。。。就是这个意思了
作者: 1774322927    时间: 2014-7-11 13:42





欢迎光临 TC官方合作论坛 (http://bbs.52tc.co/) Powered by Discuz! X3.1