搜索
查看: 6977|回复: 6

怎么判断线程是否出错

[复制链接]

36

主题

82

帖子

507

积分

三级会员

Rank: 4

积分
507
发表于 2011-10-5 09:27:01 | 显示全部楼层 |阅读模式
有时候程序运行的时候由于一些以外情况会发生错误终止,比如在多线程中,一个线程由于意外错误停止了。该怎么判断它错误停止?
回复

使用道具 举报

30

主题

695

帖子

4178

积分

超级版主

Rank: 8Rank: 8

积分
4178
发表于 2011-10-5 09:47:38 | 显示全部楼层

[align=left][font=新宋体][color=#0000ff]var[/color][color=#000000] tHandle,tId = th

var tHandle,tId = thread.create(
   
function(){
        
error("出错",2)
    }
)

thread.wait(tHandle)

io.open()

if( thread.getExitCode( tHandle ) == -1  )
    io.print(
"线程出错了,线程ID:" + tId )
   
execute("pause");
回复

使用道具 举报

4

主题

16

帖子

164

积分

一级会员

Rank: 2

积分
164
发表于 2015-12-17 22:33:28 | 显示全部楼层

thread.wait这个函数会阻塞程序运行,用这个函数的话很多时候会破坏掉使用多线程的初衷, 不知道有没有更好的办法。

thread.wait这个函数会阻塞程序运行,用这个函数的话很多时候会破坏掉使用多线程的初衷, 不知道有没有更好的办法。

点评

你这个说法是错误的,thread.wait可以在主线程忙完了有必要的时候再调用 - 不是一定要阻塞,而且用thread.waitOne在界面线程中也可以不阻塞的等待,这里只是用控制台程序举个例子而已  发表于 2015-12-18 00:01
回复

使用道具 举报

4

主题

16

帖子

164

积分

一级会员

Rank: 2

积分
164
发表于 2015-12-17 22:42:35 | 显示全部楼层

据我研究, 可以使用thread.getExitCode来判断一个线程的状态。 线程正在运行时这个函数返回的值似乎是固定的259, 也许也可能是别的, 但是应该

据我研究, 可以使用thread.getExitCode来判断一个线程的状态。 线程正在运行时这个函数返回的值似乎是固定的259, 也许也可能是别的, 但是应该肯定是大于0的数字。如果线程因为出错意外结束, 返回值是-1。如果线程正常结束, 并且return了一个数字, 那么thread.getExitCode得到的值就是那个线程return的数字。

点评

线程如果没出错返回值应当保证大于0,259是_STILL_ACTIVE表示线程正在运行,也可以使用 thread.stillActive() 函数做相同判断,一个线程的状态是STILL_ACTIVE,不表示他后面不会出错,所以需要先 thread.wait()  发表于 2015-12-18 00:06
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2018-12-15 17:34 , Processed in 0.062500 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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