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
MapleCreateContinuationTask - 継続タスクの作成
使い方
MapleCreateContinuationTask(kv, int (M_DECL *TaskFunction)( void *, int , void * ), void *self, void (M_DECL *MarkTaskFunction)( void * ) )
パラメータ
kv
-
MKernelVector 型のカーネルハンドル
TaskFunction
継続タスクとして実行するための関数へのポインタ
self
継続タスクへ渡される引数
MarkTaskFunction
ガーベージコレクションが発生したときに呼び出される関数
モデルの説明
MapleCreateContinuationTask は現在実行中のタスクの継続タスクを作成します。継続タスクの作成後、MapleStartChildTask を呼び出すことにより、子タスクを開始することが可能です。
外部呼び出しで Task Programming Model を使用する前に、まず Maple におけるタスクプログラミングを十分に理解する必要があります。外部呼び出しインターフェイスはさらに複雑であるため、先に基本となるモデルを理解しておけば、外部呼び出し インターフェイスを理解しやすくなります。
外部呼び出しにおいて、タスクは 関数とデータ要素です。タスク関数は次の原型に合致している必要があります。
int (M_DECL *TaskFunction)( void *parent, int arg_number, void *self )
self パラメータは実行対象タスクの入力データです。parent パラメータはそのタスクの親タスクの入力データです。タスクが親タスクに値を渡そうとする場合、親タスクの入力データを更新するのは子タスクの役割です。arg_number パラメータの値は、現在のタスクが作成された時点で MapleStartChildTask の 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 を返しますが、現在この値は使用されていません。
継続タスクの作成後、MapleStartChildTask 関数を呼び出すことにより子タスクを開始することができます。
MarkTaskFunction 関数は、ガーベージコレクションが発生し、継続タスクが引き続き有効な場合に呼び出されます。MarkTaskFunction に渡される引数は self として渡される値です 。これにより、プログラマはタスク内に Maple データ構造を維持し、ガーベージコレクションの発生時に構造にマーキングしておくことができます。マーキングの詳細は MapleGcMark のヘルプページを参照してください。
TaskFunction, self および MarkTaskFunction がすべて NULL の場合、継続タスクは作成されますが、実行時にどのユーザーコードも実行しません。
詳細な例については OpenMaple/C/TaskProgramming のページを参照してください。
関連項目
CustomWrapper, define_external, OpenMaple, OpenMaple/C/API, OpenMaple/C/Examples, OpenMaple/C/MapleStartChildTask, OpenMaple/C/MapleStartRootTask, OpenMaple/C/MapleTaskReturn
Download Help Document