输入/搜索内容
内置函数
Global
Version
Sleep
IsVirtual
Mail
Mail_Go
SetErrorFilter
GetPid
GetLastError
GetCommand
GetMeta
Dial
HttpQuery
HttpQuery_Go
Encode
UnixNano
Unix
GetOS
MD5
DBExec
UUID
EventLoop
__Serve
_G
_D
_N
_C
_Cross
JSON.parse
JSON.stringify
SetChannelData
GetChannelData
Log
Market
Trade
Account
Futures
Threads
threading
Thread
getThread
mainThread
currentThread
Lock
Condition
Event
Dict
pending
Thread
ThreadLock
ThreadEvent
ThreadCondition
ThreadDict
TA
Talib
talib.CDL2CROWS
talib.CDL3BLACKCROWS
talib.CDL3INSIDE
talib.CDL3LINESTRIKE
talib.CDL3OUTSIDE
talib.CDL3STARSINSOUTH
talib.CDL3WHITESOLDIERS
talib.CDLABANDONEDBABY
talib.CDLADVANCEBLOCK
talib.CDLBELTHOLD
talib.CDLBREAKAWAY
talib.CDLCLOSINGMARUBOZU
talib.CDLCONCEALBABYSWALL
talib.CDLCOUNTERATTACK
talib.CDLDARKCLOUDCOVER
talib.CDLDOJI
talib.CDLDOJISTAR
talib.CDLDRAGONFLYDOJI
talib.CDLENGULFING
talib.CDLEVENINGDOJISTAR
talib.CDLEVENINGSTAR
talib.CDLGAPSIDESIDEWHITE
talib.CDLGRAVESTONEDOJI
talib.CDLHAMMER
talib.CDLHANGINGMAN
talib.CDLHARAMI
talib.CDLHARAMICROSS
talib.CDLHIGHWAVE
talib.CDLHIKKAKE
talib.CDLHIKKAKEMOD
talib.CDLHOMINGPIGEON
talib.CDLIDENTICAL3CROWS
talib.CDLINNECK
talib.CDLINVERTEDHAMMER
talib.CDLKICKING
talib.CDLKICKINGBYLENGTH
talib.CDLLADDERBOTTOM
talib.CDLLONGLEGGEDDOJI
talib.CDLLONGLINE
talib.CDLMARUBOZU
talib.CDLMATCHINGLOW
talib.CDLMATHOLD
talib.CDLMORNINGDOJISTAR
talib.CDLMORNINGSTAR
talib.CDLONNECK
talib.CDLPIERCING
talib.CDLRICKSHAWMAN
talib.CDLRISEFALL3METHODS
talib.CDLSEPARATINGLINES
talib.CDLSHOOTINGSTAR
talib.CDLSHORTLINE
talib.CDLSPINNINGTOP
talib.CDLSTALLEDPATTERN
talib.CDLSTICKSANDWICH
talib.CDLTAKURI
talib.CDLTASUKIGAP
talib.CDLTHRUSTING
talib.CDLTRISTAR
talib.CDLUNIQUE3RIVER
talib.CDLUPSIDEGAP2CROWS
talib.CDLXSIDEGAP3METHODS
talib.AD
talib.ADOSC
talib.OBV
talib.ACOS
talib.ASIN
talib.ATAN
talib.CEIL
talib.COS
talib.COSH
talib.EXP
talib.FLOOR
talib.LN
talib.LOG10
talib.SIN
talib.SINH
talib.SQRT
talib.TAN
talib.TANH
talib.MAX
talib.MAXINDEX
talib.MIN
talib.MININDEX
talib.MINMAX
talib.MINMAXINDEX
talib.SUM
talib.HT_DCPERIOD
talib.HT_DCPHASE
talib.HT_PHASOR
talib.HT_SINE
talib.HT_TRENDMODE
talib.ATR
talib.NATR
talib.TRANGE
talib.BBANDS
talib.DEMA
talib.EMA
talib.HT_TRENDLINE
talib.KAMA
talib.MA
talib.MAMA
talib.MIDPOINT
talib.MIDPRICE
talib.SAR
talib.SAREXT
talib.SMA
talib.T3
talib.TEMA
talib.TRIMA
talib.WMA
talib.LINEARREG
talib.LINEARREG_ANGLE
talib.LINEARREG_INTERCEPT
talib.LINEARREG_SLOPE
talib.STDDEV
talib.TSF
talib.VAR
talib.ADX
talib.ADXR
talib.APO
talib.AROON
talib.AROONOSC
talib.BOP
talib.CCI
talib.CMO
talib.DX
talib.MACD
talib.MACDEXT
talib.MACDFIX
talib.MFI
talib.MINUS_DI
talib.MINUS_DM
talib.MOM
talib.PLUS_DI
talib.PLUS_DM
talib.PPO
talib.ROC
talib.ROCP
talib.ROCR
talib.ROCR100
talib.RSI
talib.STOCH
talib.STOCHF
talib.STOCHRSI
talib.TRIX
talib.ULTOSC
talib.WILLR
talib.AVGPRICE
talib.MEDPRICE
talib.TYPPRICE
talib.WCLPRICE
OS
结构体
内置变量

Thread对象可以通过threading.Thread()threading.getThread()threading.mainThread()threading.currentThread()创建或返回。

peekMessage()函数用于从线程接收消息。

peekMessage()
peekMessage(timeout)

示例

并发线程向主线程发送消息。

javascript
function main() { var t1 = threading.Thread(function() { for (var i = 0; i < 10; i++) { Log("thread1 postMessage():", i) threading.mainThread().postMessage(i) Sleep(500) } }) while (true) { var msg = threading.currentThread().peekMessage() Log("main peekMessage():", msg) if (msg == 9) { break } Sleep(1000) } t1.join() }

返回值

类型描述

string / number / bool / object / array / any (系统支持的所有类型)

peekMessage()函数返回当前线程对象关联的线程接收到的消息。

参数

名称类型必填描述

timeout

number

参数timeout为超时设置,按照该参数设置的毫秒数阻塞等待并返回数据;若无数据且超时则返回空值。如果timeout设置为0或不传timeout参数,则一直阻塞等待,直到接收到通道中的数据。如果timeout设置为-1,则不阻塞并立即返回数据,无数据时返回空值。

参考

备注

编写程序时需注意避免线程死锁问题。

postMessage()函数用于向线程发送消息。

postMessage(msg)

示例

  • 在并发线程中发送消息,使用eventLoop()接收消息通知。

    javascript
    function main() { var t1 = threading.Thread(function() { for (var i = 0; i < 10; i++) { Log("thread1 postMessage():", i) threading.mainThread().postMessage(i) Sleep(500) } }) for (var i = 0; i < 10; i++) { var event = threading.mainThread().eventLoop() Log("main event:", event) Sleep(500) } t1.join() }
  • 支持发送函数。

    javascript
    function main() { threading.mainThread().postMessage(function(msg) { Log("func from mainThread, msg:", msg) }) threading.Thread(function() { var func = threading.mainThread().peekMessage() func("in " + threading.currentThread().name()) }).join() }

参数

名称类型必填描述

msg

string / number / bool / object / array / function / any (系统支持的所有类型)

参数msg为要发送的消息。

参考

备注

当线程的执行函数中调用postMessage()函数发送信号或数据时,会产生消息事件。可以使用eventLoop()函数接收消息通知。

join()函数用于等待线程退出并回收系统资源。

join()
join(timeout)

示例

测试join()函数超时并输出返回值。

javascript
function main() { var t1 = threading.Thread(function() { Log("Hello thread1") Sleep(5000) }) var ret = t1.join(1000) Log("ret:", ret) // ret: undefined ret = t1.join() Log("ret:", ret) // ret: {"id":1,"terminated":false,"elapsed":5003252000} }

返回值

类型描述

ThreadRet对象

ThreadRet对象包含执行结果的相关数据,包含以下属性:

  • id: 线程ID。
  • terminated: 线程是否被强制终止。
  • elapsed: 线程的运行时间(纳秒)。
  • ret: 线程函数的返回值。

参数

名称类型必填描述

timeout

number

timeout参数用于设置等待线程结束的超时时间,单位为毫秒。当timeout参数设置为0或不设置timeout参数时,join()函数会阻塞等待,直到线程执行结束。当timeout参数设置为-1时,join()函数会立即返回。

参考

备注

join()函数超时时返回undefined

terminate()函数用于强制终止线程,释放该线程占用的硬件资源。

terminate()

示例

强制终止一个线程的执行。线程被强制终止后,日志中将不再输出该线程的内容。

javascript
function main() { var t1 = threading.Thread(function() { for (var i = 0; i < 10; i++) { Log("thread1 i:", i) Sleep(1000) } }) Sleep(3000) t1.terminate() Log("after t1.terminate()") while (true) { LogStatus(_D()) Sleep(1000) } }

参考

备注

对于使用terminate()函数强制终止的线程,无法再使用join()函数等待其结束。

getData()函数用于访问线程环境中记录的变量。数据在线程未执行join()函数(等待退出成功)且未执行terminate()函数(强制终止线程)的情况下有效。

getData()
getData(key)

示例

在并发线程的环境中记录键名为count的值,然后在主线程中读取count的键值。

javascript
function main() { var t1 = threading.Thread(function() { for (var i = 0; i < 5; i++) { threading.currentThread().setData("count", i) Log(`setData("count"):`, i) Sleep(1000) } }) for (var i = 0; i < 5; i++) { var count = threading.getThread(t1.id()).getData("count") Log(`getData("count"):`, count) Sleep(1000) } t1.join() }

返回值

类型描述

string / number / bool / object / array / any (系统支持的所有类型)

getData()函数返回当前线程环境中存储的键值对中key参数对应的键值。

参数

名称类型必填描述

key

string

key参数为存储的键值对的键名。

参考

setData()函数用于在线程环境中存储变量。

setData(key, value)

示例

  • 在并发线程中设置键值对,在主线程中读取该键值对。

    javascript
    function main() { var t1 = threading.Thread(function() { threading.currentThread().setData("data", 100) }) Sleep(1000) Log(`t1.getData("data"):`, t1.getData("data")) t1.join() }
  • 支持将函数作为键值传入。

    javascript
    function main() { threading.mainThread().setData("func2", function(p) { Log("func2 p:", p) }) var t1 = threading.Thread(function() { threading.currentThread().setData("func1", function(p) { Log("func1 p:", p) }) var func2 = threading.mainThread().getData("func2") func2("test2") }) Sleep(1000) var func1 = t1.getData("func1") func1("test1") t1.join() }

参数

名称类型必填描述

key

string

key参数用于指定存储的键值对的键名。

value

string / number / bool / object / array / function / any (系统支持的所有类型)

value参数用于指定存储的键值对的键值。

参考

备注

数据在线程未执行join()函数(等待退出成功)且未执行terminate()函数(强制终止线程)的情况下有效。参数value的值必须是可序列化的变量。

id()函数用于返回当前多线程对象实例的threadId

id()

示例

创建一个并发线程,在主线程中输出该并发线程的threadId

javascript
function main() { var t1 = threading.Thread(function() { threading.currentThread().setData("data", 100) }) Log(`t1.id():`, t1.id()) t1.join() }

返回值

类型描述

number

id()函数返回当前线程的threadId

参考

name()函数用于返回当前多线程对象实例的名称。

name()

示例

创建一个并发运行的线程,在主线程中输出该并发线程的名称。

javascript
function main() { var t1 = threading.Thread(function() { threading.currentThread().setData("data", 100) }) Log(`t1.name():`, t1.name()) // t1.name(): Thread-1 t1.join() }

返回值

类型描述

string

name()函数返回并发线程的名称。

参考

eventLoop()函数用于监听线程接收到的事件。

eventLoop()
eventLoop(timeout)

示例

并发执行3个线程,输出接收到的事件信息。超时或立即返回时输出空值。

javascript
function main() { var t1 = threading.Thread(function() { while (true) { var eventMsg = threading.currentThread().eventLoop() // 阻塞等待 // 2024-11-14 10:14:18 thread1 eventMsg: {"Seq":1,"Event":"thread","ThreadId":0,"Index":1,"Queue":0,"Nano":1731550458699947000} Log(_D(), "thread1 eventMsg:", eventMsg) } }) var t2 = threading.Thread(function() { while (true) { var eventMsg = threading.currentThread().eventLoop(-1) // 立即返回 Log(_D(), "thread2 eventMsg:", eventMsg) Sleep(5000) } }) var t3 = threading.Thread(function() { while (true) { var eventMsg = threading.currentThread().eventLoop(3000) // 设置3秒超时 Log(_D(), "thread3 eventMsg:", eventMsg) } }) t1.postMessage("Hello ", t1.name()) t2.postMessage("Hello ", t2.name()) t3.postMessage("Hello ", t3.name()) t1.join() t2.join() t3.join() }

返回值

类型描述

object / 空值

eventLoop()函数返回当前线程接收到的事件信息,详见事件信息结构

参数

名称类型必填描述

timeout

number

参数timeout为超时设置,单位为毫秒。参数timeout如果设置为0则阻塞等待直到有事件发生才返回;如果大于0则设置事件等待超时时间;如果小于0则立即返回最近的事件。

参考

备注

eventLoop()函数的处理机制与全局函数EventLoop()一致。