test1.monkey2 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. Namespace test1
  2. #Import "<std>"
  3. #Import "<mojo>"
  4. #Import "<mojo3d>"
  5. #Import "<thread>"
  6. Using std..
  7. Using mojo..
  8. Using mojo3d..
  9. #If __THREADS__
  10. Class C
  11. End
  12. Function Test()
  13. Const N:=10
  14. Local threads:=New Thread[N]
  15. For Local i:=0 Until N
  16. Local sema:=New Semaphore
  17. threads[i]=New Thread( Lambda()
  18. Print "Starting thread id="+Thread.Current().Id
  19. sema.Signal()
  20. For Local i:=0 Until 10
  21. Print "thread="+Thread.Current().Id+" i="+i
  22. For Local j:=0 Until 1000
  23. Local tmp:=New C
  24. Local tmp2:=tmp
  25. Next
  26. Next
  27. End )
  28. Print "Thread started id="+threads[i].Id
  29. Next
  30. For Local i:=0 Until N
  31. Print "Joining "+i
  32. threads[i].Join()
  33. Print "Joined "+i
  34. Next
  35. End
  36. #endif
  37. Class MyWindow Extends Window
  38. Field _scene:Scene
  39. Field _camera:Camera
  40. Field _light:Light
  41. Field _ground:Model
  42. Field _donut:Model
  43. Method New( title:String="Simple mojo3d app",width:Int=640,height:Int=480,flags:WindowFlags=WindowFlags.Resizable )
  44. Super.New( title,width,height,flags )
  45. End
  46. Method OnCreateWindow() Override
  47. 'create (current) scene
  48. _scene=New Scene
  49. _scene.ClearColor = New Color( 0.2, 0.6, 1.0 )
  50. _scene.AmbientLight = _scene.ClearColor * 0.25
  51. _scene.FogColor = _scene.ClearColor
  52. _scene.FogFar = 1.0
  53. _scene.FogFar = 200.0
  54. 'create camera
  55. _camera=New Camera( Self )
  56. _camera.AddComponent<FlyBehaviour>()
  57. _camera.Move( 0,2.5,-5 )
  58. 'create light
  59. _light=New Light
  60. _light.CastsShadow=True
  61. _light.Rotate( 45, 45, 0 )
  62. 'create ground
  63. Local groundBox:=New Boxf( -100,-1,-100,100,0,100 )
  64. Local groundMaterial:=New PbrMaterial( Color.Lime )
  65. _ground=Model.CreateBox( groundBox,1,1,1,groundMaterial )
  66. _ground.CastsShadow=False
  67. 'create donut
  68. Local donutMaterial:=New PbrMaterial( Color.Red, 0.05, 0.2 )
  69. _donut=Model.CreateTorus( 2,.5,48,24,donutMaterial )
  70. _donut.Move( 0,2.5,0 )
  71. End
  72. Method OnRender( canvas:Canvas ) Override
  73. RequestRender()
  74. _donut.Rotate( .2,.4,.6 )
  75. _scene.Update()
  76. _camera.Render( canvas )
  77. canvas.DrawText( "FPS="+App.FPS,0,0 )
  78. End
  79. End
  80. Function Main()
  81. #If __THREADS__
  82. Local N:=10
  83. GCSetTrigger( 65536 )
  84. ' GCSuspend()
  85. For Local i:=0 Until N
  86. Test()
  87. Next
  88. Print "Threads test finished!"
  89. #endif
  90. New AppInstance
  91. New MyWindow
  92. App.Run()
  93. End