与世无争逍遥一生 發表於 2018-12-6 14:13:37

详解易语言等待线程

<p>命令名:<strong>等待线程</strong><br />
</p>
<p>等待,直到指定线程结束或等待超时才返回。返回真表示等待成功。注意,在Linux下暂不支持超时等待。本命令为初级命令。</p>
<p>
<table cellspacing="0">
<tbody>
    <tr>
      <td>参数</td>
      <td>数据类型</td>
      <td>说明</td>
    </tr>
    <tr>
      <td>线程句柄</td>
      <td>整数型(int)</td>
      <td>可通过“启动线程”的第三个参数获取线程句柄。</td>
    </tr>
    <tr>
      <td>等待时间</td>
      <td>整数型(int)</td>
      <td>可以被省略。指定等待时间,单位为毫秒。如果为0或负数,或被省略,表示不限定等待时间。</td>
    </tr>
</tbody>
</table>
</p>
<p>我们可以通过等待线程来判断一个线程是否结束</p>
<div class="jb51code">
<pre class="brush:xhtml;">
.版本 2
.支持库 EThread

.程序集 窗口程序集1
.程序集变量 线程句柄, 整数型

.子程序 _按钮1_被单击

启动线程 (&amp;子程序1, , 线程句柄)

.如果真 (等待线程 (线程句柄, ))
信息框 (“线程结束”, 0, )
关闭线程句柄 (线程句柄)
.如果真结束



.子程序 子程序1
.局部变量 n, 整数型

.计次循环首 (1000, n)
输出调试文本 (到文本 (n))
.计次循环尾 ()</pre>
</div>
<p><img src="https://img.jbzj.com/file_images/article/201812/201812061413561.png" alt="" /></p>
<p>但是这样还有一个问题,本来用多线程的本意是为了子程序1的循环不影响窗口的消息响应,但是加了一个等待线程又把主线程阻塞了,不符合我们的本意。</p>
<p>解决方法就是把等待线程放到另一个线程中去:</p>
<div class="jb51code">
<pre class="brush:xhtml;">
.版本 2
.支持库 EThread

.程序集 窗口程序集1
.程序集变量 线程句柄, 整数型, , "2"

.子程序 _按钮1_被单击

启动线程 (&amp;子程序1, , 线程句柄 )
启动线程 (&amp;子程序2, , 线程句柄 )
关闭线程句柄 (线程句柄 )


.子程序 子程序2

.如果真 (等待线程 (线程句柄 , ))
信息框 (“线程1结束”, 0, )
关闭线程句柄 (线程句柄 )
.如果真结束


.子程序 子程序1
.局部变量 n, 整数型

.计次循环首 (1000, n)
输出调试文本 (到文本 (n))
.计次循环尾 ()</pre>
</div>
<p><img src="https://img.jbzj.com/file_images/article/201812/201812061413562.png" alt="" /></p>
<p>如此,在不阻塞主线程的情况下完成了等待线程。</p>
                           
                            <div class="art_xg">
                              
                            </div>

                        </div>
                        <!--endmain-->
頁: [1]
查看完整版本: 详解易语言等待线程