FreeBASIC マニュアルのトップに戻る

FreeBASIC KeyPgThreadCall

目次→実行時ライブラリー参考→多重スレッド化サポートTHREADCALL←オリジナル・サイト

THREADCALL 左にメニュー・フレームが表示されていない場合は、ここをクリックして下さい

←リンク元に戻る プログラム開発関連に戻る

個別の実行スレッドのパラメーターで、ユーザ定義の手続きを始めます。


構文:
function Threadcall subname([paramlist]) as any ptr

用法:
threadid = Threadcall subname([paramlist])

パラメタ:
subname
サブルーチンの名前
paramlist
サブルーチンに渡すパラメータのリスト(通常 sub call と同じ)。

戻り値:
Threadcall は、作成されたスレッドへの any ptr ハンドルを返します。失敗の場合は、ヌルポインタ (0) を返します。

記述:
Threadcreate のように、Threadcall は、Threadcall を呼ぶコードと同時に走るスレッドを作成します。
殆どすべての sub への通常の呼び出しの前に "Threadcall" を置くことによって、sub は、新しいスレッドの内部で呼ばれ、そのスレッドへのポインターを返します。

Threadcall の使用は、スレッドを作成する簡単な方法です。そして、データが、グローバル変数や、安全でない型のポインタなしで、スレッドに渡されることを可能にします。
しかし、Threadcreate は、より効率的で、多数のスレッドをつくっているプログラムのために使われるべきです。

ほとんどのサブルーチンはサポートされていますが、次の形式のサブルーチンは、呼ばれないかもしれません:

Threadcall を使うとき、 サブルーチンがパラメータを持つときは、パラメータ・リストに括弧が必要です。

警告:
- 現在、Threadcall でスレッドにパラメータを渡す場合、Threadcall 命令文の終了後、スレッドが起動されるまで、対応するデータが維持されるという保証はありません。
- これは悪い行動を引き起こす可能性があります:
- 以下の例では、パラメータ id が表示されていませんが、これは文字列引数が早期に破棄された結果であると思われます。(fbc バージョン >= 1.00 で現れます)。
- パラメータ宣言で id As Stringid As Zstring に置き換えると、このパラメータを渡すときの問題を回避することができます。
- したがって、現時点では、代わりに Threadcreate (100%安全)を使うことを推奨します。

例:

'' Threading using "ThreadCall"

Sub thread( id As String, tlock As Any Ptr, count As Integer )
    For i As Integer = 1 To count
        MutexLock tlock
        Print "thread " & id;
        Locate , 20
        Print i & "/" & count
        MutexUnlock tlock
    Next
End Sub

Dim tlock As Any Ptr = MutexCreate()
Dim a As Any Ptr = ThreadCall thread("A", tlock, 6)
Dim b As Any Ptr = ThreadCall thread("B", tlock, 4)
ThreadWait a
ThreadWait b
MutexDestroy tlock
Print "All done (and without Dim Shared!)"
Sleep


方言差:

プラットホーム差:

QBからの違い:

参照:
多重スレッド化サポート に戻る
←リンク元に戻る プログラム開発関連に戻る
ページ歴史:2020-11-12 09:50:07
日本語翻訳:WATANABE Makoto、原文著作者:CountingPine

ホームページのトップに戻る

表示-非営利-継承