uses <bf>
uses <crt>
proc main():
for(i ?= 1; i <= 10; i++):
launch:
sleep(random() * 100)
println(i)
end
end
inputln()
end
9
1
2
7
5
3
10
4
6
8
uses <bf>
uses <crt>
proc main():
println("Hello!")
async a:
println("Test")
sleep(1000)
println("Test")
sleep(1000)
println("Test")
sleep(1000)
end
async b:
println("Test 2")
sleep(300)
println("Test 2")
sleep(300)
println("Test 2")
sleep(300)
end
wait a, b
println("End!")
inputln()
end
Hello!
Test
Test 2
Test 2
Test 2
Test
Test
End!
class TThread:
protected:
var ThreadContext
public:
var Resumed, Terminated, FreeOnTerminate
proc Create, Free
proc Execute //for overriding
proc Suspend, Resume, Terminate, WaitFor, ReJoin //Control proc's
end
class TCriticalSection:
protected:
var Critical_Section_Controller
public:
proc Create, Free
//Methods
proc Enter, Leave
func TryEnter
end
func Async(method, ...)
func Thread(method, ...)
func Parallel(method, ...)
class TAtomic:
private:
var Locker, Value
public:
proc Create, Free
proc Set
func Get
end
class TCoroutine(TThread):
public:
var NextCoroutine
proc Create
proc Yield, YieldFor
end
uses <bf>
uses <crt>
uses <threads>
class MyThreadClass(TThread):
var Param
proc Create, Execute
end
proc MyThreadClass::Create(Param):
$Param ?= Param
TThread::Create$(true)
end
proc MyThreadClass::Execute():
for(i ?= 0; i < 10; i++):
PrintLn(i, ": ", $Param)
end
end
proc main():
new MyThreadClass("Thread #2!")
InputLn()
end
uses <bf>
uses <crt>
uses <threads>
proc class::MyThreadedProc():
for(i ?= 0; i < 10; i++):
PrintLn(i, ": Threaded hello!")
end
end
proc main():
Thr ?= new TThread(false)
Thr->Execute ?= class::MyThreadedProc
Thr->Resume()
InputLn()
end
uses <bf>
uses <crt>
uses <threads>
proc ThreadedProc(Arg):
for(i ?= 0; i < 10; i++):
PrintLn(i, ": ", Arg)
end
end
proc main():
Async(ThreadedProc, "Thread #1!")
InputLn()
end
uses <bf>
uses <crt>
uses <threads>
var CSect = new TCriticalSection()
proc ThreadedProc(Arg):
while true:
CSect -> Enter()
PrintLn(Arg)
CSect -> Leave()
Sleep(10)
gc()
end
end
proc CriticalThreadedProc():
while true:
Sleep(3000)
CSect -> Enter()
Sleep(1000)
PrintLn("And now...")
Sleep(1000)
PrintLn("Time to...")
Sleep(1000)
PrintLn("Critical section!")
Sleep(3000)
CSect -> Leave()
gc()
end
end
proc main():
Async(ThreadedProc, "I'm thread #1!!!")
Async(CriticalThreadedProc)
InputLn()
end
uses <bf>
uses <crt>
uses <threads>
proc main():
MyThreadValue ?= new TAtomic(0)
launch:
while true:
MyThreadValue -> Set(1)
Sleep(8)
gc()
end
end
launch:
while true:
MyThreadValue -> Set(2)
Sleep(3)
gc()
end
end
launch:
while true:
MyThreadValue -> Set(3)
Sleep(11)
gc()
end
end
while true:
PrintLn(MyThreadValue -> Get())
Sleep(100)
gc()
end
end
uses <bf>
uses <crt>
uses <threads>
proc class::Proc1():
while true:
println("Hello world #1")
sleep(100)
gc()
$yield()
end
end
proc class::Proc2():
while true:
println("Hello world #2")
sleep(100)
gc()
$yield()
end
end
proc class::Proc3():
while true:
println("Hello world #3")
sleep(100)
gc()
$yield()
end
end
proc main():
cor3 ?= new TCoroutine(false, null)
cor3 -> Execute ?= class::Proc3
cor2 ?= new TCoroutine(false, cor3)
cor2 -> Execute ?= class::Proc2
cor1 ?= new TCoroutine(false, cor2)
cor1 -> Execute ?= class::Proc1
cor3 -> NextCoroutine ?= cor1
cor1 -> Resume()
InputLn()
end
Hello world #1
Hello world #2
Hello world #3
Hello world #1
Hello world #2
Hello world #3
...
whilst <условие>:
...
end
К сожалению, не доступен сервер mySQL