KSGSThread.cpp 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. #include "KSGSThread.h"
  2. #include "KSGSTyp.h"
  3. #include "../Error/Error.h"
  4. #include "KSGSInt.h"
  5. #include "KSGSBool.h"
  6. using namespace KSGScript;
  7. // Inhalt der KSGSThreadKlasse Klasse aus KSGSThreadKlasse.h
  8. // Konstruktor
  9. KSGSThreadKlasse::KSGSThreadKlasse( KSGScriptObj *zObj, KSGSFunktionInstanz *f )
  10. : KSGSKlasseInstanz( KSGS_THREAD, 0, 0, zObj )
  11. {
  12. func = f;
  13. }
  14. // Destruktor
  15. KSGSThreadKlasse::~KSGSThreadKlasse()
  16. {
  17. if( func )
  18. func->release();
  19. }
  20. // nicht constant
  21. void KSGSThreadKlasse::threadEnde()
  22. {
  23. if( func )
  24. func = func->release();
  25. }
  26. KSGSVariable *KSGSThreadKlasse::startFunktion( int id, bool access, RCArray< KSGSVariable > *parameter )
  27. {
  28. switch( id )
  29. {
  30. case 0: // void pause();
  31. if( func )
  32. func->setPause( 1 );
  33. break;
  34. case 1: // void fortsetzen();
  35. if( func )
  36. func->setPause( 0 );
  37. break;
  38. case 2: // void ende();
  39. if( func )
  40. func->setEnde();
  41. break;
  42. case 3: // bool läuft();
  43. if( func )
  44. {
  45. parameter->release();
  46. return new KSGSBoolKlasse( obj, func->wirdAusgeführt() );
  47. }
  48. break;
  49. case 4: // int warteAufThread( int zeit )
  50. if( func )
  51. {
  52. int zeit = 0;
  53. if( parameter->getEintragAnzahl() >= 1 && parameter->z( 0 ) )
  54. zeit = parameter->z( 0 )->getInt();
  55. else
  56. error( 20, {}, obj );
  57. parameter->release();
  58. return new KSGSIntKlasse( obj, func->warteAufFunktion( zeit ) );
  59. }
  60. break;
  61. default:
  62. error( 19, {}, obj );
  63. break;
  64. }
  65. parameter->release();
  66. return 0;
  67. }
  68. // Reference Counting
  69. KSGSVariable *KSGSThreadKlasse::release()
  70. {
  71. ref--;
  72. if( !ref )
  73. delete this;
  74. return 0;
  75. }