スレッド生成

タグ:

スレッドを生成します。処理を並行して行いたいときに使います。

構文
THREAD 関数名( )
引数
戻り値

エラー

64個まででそれ以上のスレッドを生成するとエラーが発生します。

Error: 最大スレッド数64 を超えました

Internet Explorerのポップアップを自動的に閉じる

THREAD popup()

// スレッドを生成した後にInternet Explorerの処理を記述

PROCEDURE popup()
	DIM ID
	WHILE TRUE
		TRY
			ID = GETID(“Web ページからのメッセージ”, “#32770”)
			IF CLKITEM(ID, “OK”, ITM_BTN) = TRUE THEN PRINT “Web ページからのメッセージ”
			ID = GETID(“Windows Internet Explorer”, “#32770”)
			IF CLKITEM(ID, “このページから移動”, ITM_BTN) = TRUE THEN PRINT “このページから移動”
			ID = GETID(“Internet Explorer”, “IEFrame”)
			IF CLKITEM(ID, “Web ページの回復”, ITM_BTN) = TRUE THEN PRINT “Web ページの回復”
			ID = GETID(“Internet Exokirer”, “IEFrame”)
			IF CLKITEM(ID, “すべてのコンテンツを表示”, CLK_BTN) = TRUE THEN PRINT “すべてのコンテンツを表示”
		EXCEPT
		ENDTRY
		SLEEP(3.000)
	WEND
FEND

プログラム実行例

func関数のflg=TRUE以前に並行して行いたい処理を記述。今回は3秒待機するプログラム。

func関数の処理が完了するとループを抜けて、メインルーチンの続きが実行されます。

PUBLIC flg = FALSE

THREAD func()

// flg=TRUEになるまで待機
REPEAT
	SLEEP(0.001)
UNTIL flg

// 以下にfuncが終わってから実行する処理を記述

FUKIDASI("スレッドの処理が完了しました")
SLEEP(1.000)

PROCEDURE func()
	// ↓並行させたい処理
	FUKIDASI("3秒待ちます")
	SLEEP(3.000)
	FUKIDASI()
	// ↑並行させたい処理
	flg = TRUE
FEND
  1. THREAD

func1とfunc2の処理が終わるまで待機します。

arrayProductは配列の積を求める関数で、全ての配列がTRUEになるまで待ちます。

FALSEは0でTRUEは0以外の数値なので、FALSEがなくなれば積は0以外になりREPEAT-UNTILを抜けることができます。

PUBLIC flg[1]

SETCLEAR(flg, FALSE)

THREAD func1()
THREAD func2()

REPEAT
	SLEEP(0.001)
UNTIL arrayProduct(flg)

FUKIDASI("スレッドの処理が完了しました")
SLEEP(1.000)

PROCEDURE func1()
	FUKIDASI("3秒待ちます")
	SLEEP(3.000)
	FUKIDASI()
	flg[0] = TRUE
FEND

PROCEDURE func2()
	FUKIDASI("5秒待ちます", 0, 50)
	SLEEP(5.000)
	FUKIDASI()
	flg[1] = TRUE
FEND

//////////////////////////////////////////////////
// 【引数】
//   array : 積を求める配列 
// 【戻値】
//   配列の値の積 
//////////////////////////////////////////////////
FUNCTION arrayProduct(array[])
	DIM res = 1
	FOR item IN array
		res = res * item
	NEXT
	RESULT = res
FEND
  1. THREAD