Maple für Professional
Maple für Akademiker
Maple für Studenten
Maple Personal Edition
Maple Player
Maple Player für iPad
MapleSim für Professional
MapleSim für Akademiker
Maple T.A. - Testen & beurteilen
Maple T.A. MAA Placement Test Suite
Möbius - Online-Courseware
Machine Design / Industrial Automation
Luft- und Raumfahrt
Fahrzeugtechnik
Robotics
Energiebranche
System Simulation and Analysis
Model development for HIL
Anlagenmodelle für den Regelungsentwurf
Robotics/Motion Control/Mechatronics
Other Application Areas
Mathematikausbildung
Technik
Allgemein- und berufsbildende Schulen
Testen und beurteilen
Studierende
Finanzmodelle
Betriebsforschung
Hochleistungsrechnen
Physik
Live-Webinare
Aufgezeichnete Webinare
Geplante Veranstaltungen
MaplePrimes
Maplesoft-Blog
Maplesoft-Mitgliedschaft
Maple Ambassador Program
MapleCloud
Technische Whitepapers
E-Mail Newsletters
Maple-Bücher
Math Matters
Anwendungs-Center
MapleSim Modell-Galerie
Anwenderberichte
Exploring Engineering Fundamentals
Lehrkonzepte mit Maple
Maplesoft Welcome-Center
Resource-Center für Lehrer
Help-Center für Studierende
MapleStartRootTask - タスクプログラミングモデルにおける処理の開始
使い方
MapleStartRootTask(kv, void *output, int (M_DECL *TaskFunction)( void *, int, void * ), void *self, void (M_DECL *MarkTaskFunction)( void * ), void **ReturnValue, M_INT options )
パラメータ
kv
-
MKernelVector 型のカーネルハンドル
output
ルートタスクの出力構造へのポインタ
TaskFunction
ルートタスクを実行するための関数へのポインタ
self
ルートタスクへ渡される引数
MarkTaskFunction
ガーベージコレクションが発生したときに呼び出される関数
ReturnValue
MapleTaskReturn 関数へ渡される値を保持するための出力引数
options
タスクモデルがコードを実行する方法のオプション
モデルの説明
MapleStartRootTask は、外部呼び出しからの Task Programming Model への入口です。この関数はモデル内で最初のタスクを作成し、その後、残るタスクがなくなるまでタスクを実行します。
外部呼び出しで Task Programming Model を使用する前に、まず Maple におけるタスクプログラミングモデルを十分に理解する必要があります。外部呼び出しインターフェイスはさらに複雑であるため、先に基本となるモデルを理解しておけば、外部呼び出し インターフェイスが理解しやすくなります。
外部呼び出しにおいて、タスクは 関数とデータ要素です。タスク関数は次の原型に合致している必要があります。
int (M_DECL *TaskFunction)( void *parent, int arg_number, void *self )
self パラメータはタスクの入力データです。parent パラメータはそのタスクの親タスクの入力データです。タスクが親タスクに値を渡そうとする場合、親タスクの入力データを更新するのは子タスクの役割です。arg_number パラメータは子タスクが作成された時点で指定され、このパラメータにより、子タスクが親の入力データを更新する際に子タスクを差別化することができます。タスクがルートタスクの場合、arg_number は既定値 MAPLE_ROOT_TASK となります。
以下に例を示します。:
#include "maplec.h"
struct TaskStruct {
M_INT myData;
M_INT parentLeft;
M_INT parentRight;
};
int M_DECL TaskFunction( void *parent, int arg_number, void *self )
{
struct TaskStruct *myArgs;
M_INT ret;
myArgs = (struct TaskStruct*)self;
ret = DoWork( myArgs );
switch( arg_number )
case MAPLE_ROOT_TASK:
*(int*)parent = ret; /* Root task */
break;
case 1:
((struct TaskStruct*)parent)->parentLeft = ret;
case 2:
((struct TaskStruct*)parent)->parentRight = ret;
}
return 1;
したがって、(子タスクの実行後に)親タスクが実行されるとき、親タスクの入力データは子タスクにより更新されています。タスク関数は int を返しますが、現在この値は使用されていません。
タスクが新しい子タスクを作成しようとするとき、タスクは MapleCreateContinuationTask および MapleStartChildTask 関数を呼び出します。
MarkTaskFunction 関数は、ガーベージコレクションが発生し、ルートタスクが引き続き有効な場合に呼び出されます。MarkTaskFunction に渡される引数は self として渡される値です 。これにより、プログラマはタスク内に Maple データ構造を維持し、ガーベージコレクションの発生時に構造にマーキングしておくことができます。マーキングの詳細は MapleGcMark のヘルプページを参照してください。
MapleTaskReturn 関数が、タスクプログラミングモデルの新しく作成された呼び出しと併せて呼び出されると、MapleTaskReturn に渡される値は ReturnValue の出力パラメータに割り当てられます。ReturnValue パラメータに NULL が与えられると、MapleTaskReturn に渡される値は無視されます。
MapleStartRootTask は options パラメータを介してオプションを受け入れます。0 または既定値 MAPLE_TASK_NO_CALLBACKS のいずれかを渡します。MAPLE_TASK_NO_CALLBACKS オプションが与えられると、タスクプログラミング API は、タスク内から Maple カーネルへのコールバックを可能にする上で必要な作業を実行しません。そのため、タスクプログラミングモデル内での実行時のオーバーヘッドが若干低減されます。このオプションは、このように MapleStartRootTask を実行した結果作成されるあらゆるタスク用に記憶されます。
詳細な例については OpenMaple/C/TaskProgramming のページを参照してください。
関連項目
CustomWrapper, define_external, OpenMaple, OpenMaple/C/API, OpenMaple/C/Examples, OpenMaple/C/MapleCreateContinuationTask, OpenMaple/C/MapleStartChildTask, OpenMaple/C/MapleTaskReturn
Download Help Document