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
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