# 例程1 创建一个线程,并启动该线程
def ThreadFun() #写线程函数,在线程里循环打印100行
{
for i in range(0,100,1)
{
print("% %\n","thread",i)
}
}
thread = THREAD() #定义一个线程变量
# 创建线程,并将线程数据写入thread线程变量
thread = thread.CreateThread(ThreadFun) #默认新创建的线程处于悬挂状态,不会执行
thread.start() #线程的start()方法,将启动当前thread线程运行
# 主线程程序
for i in range(0,100,1)
{
print("% %\n","main",i)
}
print("\n")
print("%\n","主线程执行结束")
# 例程2 线程同步。创建一个线程,让主线程等待子线程执行结束后
# 很多时候,我们希望在主线程中,等待子线程完成任务后,在继续主线程的
# 任务,这就需要线程同步——thread.join()线程等待
def ThreadFun() #写线程函数,在线程里循环打印100行
{
for i in range(0,100,1)
{
print("% %\n","thread",i)
}
}
thread = THREAD() #定义一个线程变量
thread = thread.CreateThread(ThreadFun) #创建线程,新线程处于悬挂状态
thread.start() #启动当前thread子线程运行
thread.join()
# 上句的目的是要求主线程在此处等待,等到子线程执行完毕,再继续主线程
# 有了线程同步join(),就能保证只有子线程100行打印完后,才会继续主线程
# 运行,即,打印"主线程执行结束"
# 但是,多线程的第一个时间片总是分配给主线程,因此,thread.join()只能在
# 第一个时间片结束后,才生效。
# 如果主线程占时很短,主线程结束,并不影响子线程执行。
for i in range(0,100,1)
{
print("% %\n","main after join()",i)
}
print("\n")
print("%\n","主线程执行结束")
# 例程3 多线程同步
def ThreadFun()
{
for i in range(0,100,1)
{
print("% %\n","thread",i)
}
}
def ThreadFun1()
{
for i in range(0,100,1)
{
print("% %\n","thread111111111",i)
}
}
thread = THREAD()
thread = thread.CreateThread(ThreadFun)
thread1 = THREAD()
thread1 = thread1.CreateThread(ThreadFun1)
thread.start()
thread1.start()
for i in range(0,50,1)
{
print("% %\n","main",i)
}
thread.join()
thread1.join()
for i in range(0,30,1)
{
print("% %\n","main after join()",i)
}
print("\n")
print("%\n","主线程执行结束")
print("\n")
# 例程4 携带参数的子线程
def ThreadFun(x,y) #写线程函数,传递两个参数 x,y
{
for i in range(0,100,1)
{
print("% %\n","thread",x+y) #打印两个参数之和
}
}
thread = THREAD() #定义一个线程变量
# 注意:CreateThread()函数的第一个参数是线程函数名,从第二个参数开
# 始,分别对应线程函数的参数。即CreateThread()比ThreadFun()多一个
# 参数,多出的这个参数(线程函数名ThreadFun)放在最前面的位置。
# 线程函数名作为第一个参数,实参5对应形参x,实参7对应形参y,保证顺序
thread = thread.CreateThread(ThreadFun,5,7) #创建线程,新线程处于悬挂状态
thread.start() #启动当前thread子线程运行
thread.join() #要求主线程等待子线程
for i in range(0,30,1)
{
print("% %\n","main after join()",i)
}
print("\n")
print("%\n","主线程执行结束")
# 运行结果:子线程打印的是实参5+7的值
# 例程5 同一个线程函数,可以创建多个独立运行的线程
def ThreadFun(x) #写线程函数,传递一个参数 x
{
for i in range(0,100,1)
{
print("% %\n","thread",x) #打印两个参数之和
}
}
list = []
# 同一个线程函数ThreadFun,可以创建多个线程,多个线程独立运行
for i in range(0,5,1)
{
thread = THREAD() #定义一个线程变量
thread = thread.CreateThread(ThreadFun,i) #创建线程,新线程处于悬挂状态
list.append(thread)
}
for i in range(0,5,1)
{
thread = list[i]
thread.start() #启动当前thread子线程运行
thread.join() #要求主线程等待子线程
}
# 主线程默认是立即开启的
for i in range(0,200,1)
{
print("% %\n","main after join()",i)
}
print("\n")
print("%\n","主线程执行结束")
print("\n")
# 同一个线程函数可以建立多个独立运行的线程
# 例程6 多个线程共用一个变量的情况下,防写数据冲突
# 多个线程共用一个变量时,一个线程写数据时,为避免冲突可以加锁
# th1.locked()加锁,短时间独占变量,避免冲突
# th1.unlock()解锁。
a = 0 #定义全局变量,多线程共用变量
def ThreadFun() #写线程函数
{
th1 = THREAD() # 要用到线程方法,因此,这里定义一个线程对象th
for j in range(0,200,1)
{
th1.locked()
a = 5
th1.unlock()
print("sub a = % j = %\n",a,j)
}
print("sub结束 a = %\n",a)
}
thread = THREAD()
thread = thread.CreateThread(ThreadFun)
thread.start()
# 主线程开始执行
th2 = THREAD()
for i in range(0,200,1)
{
th2.locked()
a = 20000
th2.unlock()
print("main a = % i = %\n",a,i)
}
print("\n")
print("%\n","主线程执行结束")
# 例程7 获取线程ID
def ThreadFun()
{
for i in range(0,100,1)
{
print("% %\n","thread",i)
}
print("\n")
print("%\n","sub_子线程执行结束")
print("\n")
}
thread = THREAD()
thread = thread.CreateThread(ThreadFun)
thread.start()
#thread.join() #要求主线程等待子线程
# 主线程程序
for i in range(0,150,1)
{
print("% %\n","main after join()",i)
}
thread_ID = thread.get_ID() #若果ID=0,说明是一个空的线程变量,非实线程
print("\n")
print("子线程ID = %\n",thread_ID)
print("\n")
print("%\n","主线程执行结束")
# 例程8 模拟一个定时器溢出信号,人为发生线程切换
# 无输入参数,无返回
# 用途:当主线程或子线程有循环查询状态(“慢动作”)时,如果没有查询到状态变化,
# 可以强制立即切换线程(不是结束线程,保留线程继续查询),避免空转浪费时间;
# 如果查询到状态变化,执行动作完成后,结束线程。
def ThreadFun()
{
th = THREAD()
for i in range(0,20,1)
{
print("% %\n","thread",i)
th.threadchange()
# 每打印一行就切换线程
}
print("\n")
print("%\n","sub_子线程执行结束")
print("\n")
}
thread = THREAD()
thread = thread.CreateThread(ThreadFun)
# 主线程程序
count = 150
#for i in range(0,50,1)
while count
{
print("% %\n","main after join()",count)
count = count - 1
}
thread_ID = thread.get_ID() #若果ID=0,说明是一个空的线程变量,非实线程
print("\n")
print("子线程ID = %\n",thread_ID)
print("\n")
print("%\n","主线程执行结束")
# 例程9 挂起子线程
# 在多线程运行过程中,可以将一个、或多个子线程挂起,还可以重新启动
# thread.suspend()挂线程,thread.start()启动线程。
def ThreadFun() #写线程函数
{
for j in range(0,300,1)
{
a = 5
print("sub a = % j = %\n",a,j)
}
print("\n")
print("sub结束 a = %\n",a)
}
thread = THREAD()
thread = thread.CreateThread(ThreadFun)
time = TIME()
# 主线程开始执行
for i in range(0,200,1)
{
a = 20000
print("main a = % i = %\n",a,i)
if i == 130
{
thread.suspend() #主线程运行到130时,将子线程挂起
}
elif i == 180
{
thread.start() #主线程运行到180时,重启子线程
}
}
print("\n")
print("%\n","主线程执行结束")