# thread.works 库模块帮助文档

## thread 成员列表 <a id="thread" href="#thread">&#x23;</a>

### thread.works <a id="thread.works" href="#thread.works">&#x23;</a>
线程工作项管理

### thread.works() <a id="thread.works" href="#thread.works">&#x23;</a>
[返回对象:threadWorkObject](#threadWorkObject)

### thread.works(线程数,工作函数,等待延时,初始化函数,...) <a id="thread.works" href="#thread.works">&#x23;</a>

```aardio
thread.works(线程数,工作函数,等待延时,初始化函数,...works( 20,  
	function(arguments,...) {  
		/*arguments为线程任务传递的参数,  
其他参数为创建thread.work时的附加参数,  
这些附加参数也会传递给初始化函数*/  
		return "返回值"  
	}   
);
```

## threadWorkObject 成员列表 <a id="threadWorkObject" href="#threadWorkObject">&#x23;</a>

### threadWorkObject.busy() <a id="threadWorkObject.busy" href="#threadWorkObject.busy">&#x23;</a>
是否有未完成任务

### threadWorkObject.clear() <a id="threadWorkObject.clear" href="#threadWorkObject.clear">&#x23;</a>
清空已添加的任务

### threadWorkObject.each <a id="threadWorkObject.each" href="#threadWorkObject.each">&#x23;</a>

```aardio
for( idx,args in threadWorkObject.each() ){
	/*遍历所有待执行任务,  
该函数会暂停所有任务*/
}
```

### threadWorkObject.finished() <a id="threadWorkObject.finished" href="#threadWorkObject.finished">&#x23;</a>
是否有未完成任务或未读取的任务返回值

### threadWorkObject.getHandleById(线程ID) <a id="threadWorkObject.getHandleById" href="#threadWorkObject.getHandleById">&#x23;</a>
使用线程ID返回线程句柄  
不可关闭该句柄

### threadWorkObject.peek() <a id="threadWorkObject.peek" href="#threadWorkObject.peek">&#x23;</a>
是否有线程完成了新的任务并返回了新的值，  
注意如果线程返回的是 null 将被忽略

### threadWorkObject.pop(返回个数,是否等待) <a id="threadWorkObject.pop" href="#threadWorkObject.pop">&#x23;</a>
弹出工作函数完成任务后的返回值。  
可选指定返回个数（默认为 1）,如果参数 @2 为 true 则等待直到可以获取指定个数的返回值。  
注意如果工作函数返回的是 null 将被忽略

### threadWorkObject.push() <a id="threadWorkObject.push" href="#threadWorkObject.push">&#x23;</a>
添加一个或多个调用实参到任务列表尾部。  
这些调用实参可以是任何非 null 值，可以传入 table 对象以便在单个任务中包含更多数组。  
工作函数将自动获取任务列表中的项作为线程函数的任务参数并执行任务。  
此函数会等待可用的空闲线程，等待时界面线程仍然可以处理窗口消息。  
添加成功返回 true（仅在关闭 thread.works 后才会失败）。

### threadWorkObject.pushAll() <a id="threadWorkObject.pushAll" href="#threadWorkObject.pushAll">&#x23;</a>
将参数 @1 指定数组中的所有数组元素添加到到任务列表尾部。  
数组元素可使用 table 对象传递多个参数给任务函数  
工作函数将自动获取参数并执行任务。  
此函数不会会等待可用的空闲线程，而是在添加任务后直接返回。  
添加成功返回 true（仅在关闭 thread.works 后才会失败）。

### threadWorkObject.pushAsync() <a id="threadWorkObject.pushAsync" href="#threadWorkObject.pushAsync">&#x23;</a>
添加一个或多个调用实参到任务列表尾部。  
这些调用实参可以是任何非 null 值，可以传入 table 对象以便在单个任务中包含更多数组。  
工作函数将自动获取任务列表中的项作为线程函数的任务参数并执行任务。  
此函数不会会等待可用的空闲线程，而是在添加任务后直接返回。  
添加成功返回 true（仅在关闭 thread.works 后才会失败）。

### threadWorkObject.queueCount() <a id="threadWorkObject.queueCount" href="#threadWorkObject.queueCount">&#x23;</a>
排队等候执行的任务数目

### threadWorkObject.quit(timeout) <a id="threadWorkObject.quit" href="#threadWorkObject.quit">&#x23;</a>
通知所有线程退出，并等待线程关闭。  
可选用参数 @timeout 指定超时（单位毫秒）。  
如果不指定超时则一直等待，如果指定超时则超过等待时间后中断仍在运行的线程。

### threadWorkObject.resume() <a id="threadWorkObject.resume" href="#threadWorkObject.resume">&#x23;</a>
所有线程继续执行  
可选在参数中指定线程ID

### threadWorkObject.suspend() <a id="threadWorkObject.suspend" href="#threadWorkObject.suspend">&#x23;</a>
所有线程暂停  
可选在参数中指定线程ID  
注意线程是否正在使用互斥锁

### threadWorkObject.update(索引,参数) <a id="threadWorkObject.update" href="#threadWorkObject.update">&#x23;</a>
更新任务参数\该函数只能在each循环内部使用

### threadWorkObject.wait() <a id="threadWorkObject.wait" href="#threadWorkObject.wait">&#x23;</a>
等待所有任务完成。  
可指定一个回调函数作为参数接收工作项返回值。  

建议在界面线程使用定时器替代此函数

### threadWorkObject.waitClose() <a id="threadWorkObject.waitClose" href="#threadWorkObject.waitClose">&#x23;</a>
等待所有任务完成。  
通知所有线程退出,并等待所有线程关闭.  
可指定一个回调函数作为参数接收工作项返回值  

建议在界面线程使用定时器替代此函数
