Thread
Handling
See Also: ucNewThread, ucExprThread, ucReleaseItem
uCalc Fast Math Parser allows you to group definitions and evaluations into independent threads. Whatever you define or evaluate in one thread group is invisible to other thread groups. To allocate a new thread group, use ucNewThread. This will return a handle that you can pass as the last argument to functions such as ucParse, ucDefine, ucDefineFunction, ucDefineVariable, etc.
You can re-organize functions in the include file into a class. The details will vary from compiler to compiler. But generally, when the class is constructed, you should call ucNewThread to obtain a handle for the object instance. ucParse, ucDefine, etc., should each be defined as members of the class, and you should use the thread handle with each of these functions. When the class instance is destroyed, you should call ucReleaseItem with the handle of the thread.
Current Thread
A native callback routine can retrieve the handle of the current thread that called it, using ucExprThread.
Releasing a thread
You can release a thread using ucReleaseItem with the handle of the thread. This will de-allocate all definitions associated with the thread. This can be compared to version 2.0's ucReset routine, except only the given thread is released. When you release a thread, all of its sub-threads are also released. Generally, it is best to avoid releasing the default thread, which is where the default functions and operators are defined.
Visual Basic
' Default (parent) thread definition ucDefine
"Const: Pi = Atan(1)*4" ' Thread A definitions tHandle_A
= ucNewThread() ucDefineFunction
"COSINE(x) = COS(x)", 0, tHandle_A ucDefineVariable
"IndyVar = 20", 0, tHandle_A ' Thread B definitions tHandle_B
= ucNewThread() ucDefineFunction
"COSINE(x) = COS(x * Pi / 180)", 0, tHandle_B ucDefineVariable
"IndyVar = 50", 0, tHandle_B ' Printout Print ucEval("Pi"),
ucEval("Pi", tHandle_A),
ucEval("Pi", tHandle_B) Print ucEval("IndyVar"), ucEval("IndyVar", tHandle_A), ucEval("IndyVar", tHandle_B) Print ucEval("COSINE(60)"),
ucEval("COSINE(60)", tHandle_A),
ucEval("COSINE(60)", tHandle_B) |
If you run the above example, you will get the following results:
Expression Default thread Thread
A Thread B
Pi 3.14159... 3.14159... 3.14159...
IndyVar Undefined 20 50
COSINE(60) Undefined -0.95241... 0.5
New or enhanced in version 3.0
· Nothing related to this topic.
· See What's New in version 3.0.
New or enhanced in version 2.96