まじ、公式わかりにくかったので、最小限の構成でThreadsを利用してみる。
基本形
# threadの関数の引数の型を指定
var thr: Thread[string]
# 引数textに渡された文字列を5回表示するだけの関数
proc threadFunc(text: string) {.thread.} =
for i in 0..4:
echo text
# Thread処理の開始
createThread(thr, threadFunc, "aaaaaa")
# Thread処理が終わるまで待機
joinThreads(thr)
並行処理(thread)になっているかを確認してみる
sleepを挟んで、メインプロセスを待機させ、サブスレッドで処理が実行されているかを確認してみる。
import os
# threadの関数の引数の型を指定
var thr: Thread[string]
# 1秒に一回、引数に渡された文字を1000001回表示するだけのthread用関数
proc threadFunc(text: string) {.thread.} =
for i in 0..1000000:
echo i, ": ", text
# 1秒ずつ表示処理を走らせるが、メインスレッドが5秒で終わるので、途中でプロセスが落ちるはず
sleep(1000)
# Thread処理の開始
createThread(thr, threadFunc, "aaaaaa")
# メインスレッドを5秒止める
sleep(5000)
うん、うまく処理されているっぽい
この記事を書いた人
Nな人(えぬなひと)。
Nは本名から取っています。
Laravelが大好きなPHPerで、WEBを作るときはLaravelを技術スタックに絶対推すマン。
PHP、Pythonと、昔はperlを書いていたP言語エンジニア。
最近はNimを書いたりしています。
Nは本名から取っています。
Laravelが大好きなPHPerで、WEBを作るときはLaravelを技術スタックに絶対推すマン。
PHP、Pythonと、昔はperlを書いていたP言語エンジニア。
最近はNimを書いたりしています。