目次
1.ブログ紹介
Lua研究ノートの1つとして、この記事はLuaコルーチンに関連する知識ポイントを記録します。この記事の内容は非常に単純です。これは、コルーチンの知識を知らない人のための初級レベルの研究にすぎません。もっと深く行きたいのならスキップできます。
2.コンテンツ
(1)コルーチンとは(新人チュートリアルから抜粋)
独立したスタック、独立したローカル変数、独立した命令ポインターを持ち、同時にグローバル変数や他のほとんどのものを他の協調プログラムと共有します。
(2)スレッドとの違い(新人チュートリアルから引用)
複数のスレッドを持つプログラムは、同時に複数のスレッドを実行できますが、協調プログラムは互いに協調して実行する必要があります。一度に実行されている協調プログラムは1つだけであり、この実行中の協調プログラムは、明示的に一時停止が必要な場合にのみ一時停止されます。コルーチンは同期マルチスレッドに少し似ており、同じスレッドロックを待機している複数のスレッドはコラボレーションに少し似ています。
(3)方法(新人チュートリアルから引用)
方法 | 説明 |
---|---|
coroutine.create() | コルーチンを作成し、コルーチンを返します。パラメーターは関数です。resumeと組み合わせて使用すると、関数呼び出しが呼び出されます。 |
coroutine.resume() | コルーチンを再起動し、createで使用します |
coroutine.yield() | コルーチンを一時停止し、コルーチンを一時停止状態に設定します。これを再開と組み合わせて使用すると、多くの有用な効果が得られます。 |
coroutine.status() | コルーチンのステータスを確認します。 注:コルーチンには、デッド、サスペンド、実行の3つのステータスがあります。このようなステータスがある場合は、具体的に次のプログラムを参照してください。 |
coroutine.wrap() | コルーチンを作成し、関数を返します。この関数を呼び出したら、コルーチンを入力して、作成関数を繰り返します。 |
coroutine.running() | 実行中のコルーチンを返します。コルーチンはスレッドです。実行中を使用すると、コルーチンのスレッド番号が返されます。 |
(4)特定の使用法
createを使用してコルーチンを作成できます。createのパラメーターは関数です。Createはスレッドを返します。次のコードに示すように、resumeを使用してこのスレッドを呼び出し、createを使用して作成したコルーチンを実行できます。
--创建
local co = coroutine.create(function()
print("我被调用了")
end)
--启动
coroutine.resume(co)
-----------------------------------输出
我被调用了
コルーチンが実行されているときは、外部から停止する方法はありません。次のコードに示すように、コルーチンを中断する、または中断と呼ぶことができるのは、コルーチンの内側に降伏することによってのみです。
--创建
local co = coroutine.create(function()
for i=1,10 do
print("输出:"..i)
if i == 5 then
coroutine.yield()
end
end
end)
--启动
coroutine.resume(co)
-----------------------------------输出
输出:1
输出:2
输出:3
输出:4
输出:5
同時に、コルーチンが一時停止されている場合、resumeを介してスレッドを再度呼び出すことにより、コルーチンの後続のコンテンツを実行し続けることができます。コードは次のとおりです。
--创建
local co = coroutine.create(function()
for i=1,10 do
print("输出:"..i)
if i == 5 then
coroutine.yield()
end
end
end)
--启动
coroutine.resume(co)
----------被挂起后继续执行
--恢复
coroutine.resume(co)
-----------------------------------输出
输出:1
输出:2
输出:3
输出:4
输出:5
输出:6
输出:7
输出:8
输出:9
输出:10
上記は基本的にコルーチンのすべての内容です。wrapメソッドについて説明しましょう。wrapメソッドはcreateに似ています。また、コルーチンを作成します。createとの違いは、wrapがスレッドではなく関数自体を返すことです。 wrapによって作成されます。コルーチンの場合、resumeを介して呼び出して再開するのではなく、返された関数自体を呼び出すことによって、suspendとresumeを直接実装します。コードは次のとおりです。
--创建
local co = coroutine.wrap(function()
for i=1,10 do
print("输出:"..i)
if i == 5 then
coroutine.yield()
end
end
end)
--调用 ---------将在输出五次后被挂起
co()
print("----------------------:被挂起")
--恢复
co()
-- -----------------------------------输出
输出:1
输出:2
输出:3
输出:4
输出:5
----------------------:被挂起
输出:6
输出:7
输出:8
输出:9
3.プッシュ
Github:https://github.com/KingSun5
4.結論
ブロガーの記事がよく書かれていると思われる場合は、ブロガーに注意を払い、ブログ投稿を気に入ってください。また、ブロガーの能力は限られています。記事に誤りがある場合は、コメントして批判してください。 。
QQ交換グループ:806091680(中国人)
このグループは、CSDNブロガーのChinarによって作成されました。お勧めします。私もグループにいます!
この記事はオリジナル記事ですので、有名作家の出典を転載してトップにこだわってください!!!!