@startuml
note As N0
void __fastcall TaskThread::Execute() {
// если валиден указатель на задачу (FTask),
// а также менеджер задач (FTask->Manager),
// тогда
// увеличивает счетчик ниток менеджера задач,
// затем в цикле, пока не сброшен флаг Manager->Executed
// и не завершилась задача FTask->Finished == false,
// осуществляет вызов FTask->DoSomeWork()
// по окончании процесса уменьшает счетчик менеджера задач,
// устанавливается флаг завершенности (FFinished = true)
}
end note
One <|-down- RealTaskManager
TaskManager <|-down- RealTaskManager
Creator <|-down- TaskManagerCreator
TaskManagerCreator -> RealTaskManager
TaskManager <-down- Task
TaskThread <-down- Task
Task <-up- TaskThread
Task <|-up- GeneralTask
TaskThread -down- N0
One <|-up- GeneralTask
Creator <|-up- GeneralTaskCreator
GeneralTaskCreator -> GeneralTask
TThread <|-left- TaskThread
abstract class One {
#{abstract} std::string <b>GetFName</b> ()
}
abstract class Creator {
+{abstract} One* <b>CreateOne</b>()
}
abstract class TaskManager {
+ __property bool <b>Executed</b>
+ __property int <b>ThreadCount</b>
+{abstract} bool <b>AddTask</b>()
#{abstract} <b>DoExecute</b>()
#{abstract} <b>DoStop</b>()
+ <b>IncThread</b> ()
+ <b>DecThread</b> ()
+ <b>Execute</b> ()
+ <b>Stop</b> ()
}
class RealTaskManager {
- std::string <b>GetFName</b> ()
- bool <b>AddTask</b>()
- <b>DoExecute</b>()
- <b>DoStop</b>()
}
abstract class Task {
- TaskThread* <b>FThread</b>
+ __property bool <b>Finished</b>
+ <b>Start</b> (TaskManager* manager)
# <b>DoInitThread</b> ()
+ {abstract} <b>DoSomeWork</b> ()
+ __property TaskManager* <b>Manager</b>
# <b>Finish</b> ()
}
class TaskThread {
- Task* <b>FTask</b>;
+ __property bool <b>Finished</b>
- <b>Execute</b> ()
}
class GeneralTask {
- std::string <b>GetFName</b> ()
- <b>DoInitThread</b> ()
- <b>DoSomeWork</b> ()
}
class TaskManagerCreator {
+One* <b>CreateOne</b>()
}
class GeneralTaskCreator {
+One* <b>CreateOne</b>()
}
@enduml