Maple Professionel
Maple Académique
Maple Edition Étudiant
Maple Personal Edition
Maple Player
Maple Player for iPad
MapleSim Professionel
MapleSim Académique
Maple T.A. - Suite d'examens de classement
Maple T.A. MAA Placement Test Suite
Möbius - Didacticiels de mathématiques en ligne
Machine Design / Industrial Automation
Aéronautique
Ingénierie des véhicules
Robotics
Energie
System Simulation and Analysis
Model development for HIL
Modélisation du procédé pour la conception de systèmes de contrôle
Robotics/Motion Control/Mechatronics
Other Application Areas
Enseignement des mathématiques
Enseignement de l’ingénierie
Enseignement secondaire et supérieur (CPGE, BTS)
Tests et évaluations
Etudiants
Modélisation financière
Recherche opérationnelle
Calcul haute performance
Physique
Webinaires en direct
Webinaires enregistrés
Agenda des évènements
Forum MaplePrimes
Blog Maplesoft
Membres Maplesoft
Maple Ambassador Program
MapleCloud
Livres blancs techniques
Bulletin électronique
Livres Maple
Math Matters
Portail des applications
Galerie de modèles MapleSim
Cas d'Etudes Utilisateur
Exploring Engineering Fundamentals
Concepts d’enseignement avec Maple
Centre d’accueil utilisateur Maplesoft
Centre de ressources pour enseignants
Centre d’assistance aux étudiants
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