barber event 设计

来源:互联网 发布:淘宝助理怎么改尺寸 编辑:程序博客网 时间:2024/05/16 04:50

Window process

客人上门 -> CUSTOMER_EVENT(Auto Reset) FALSE  一开始OFF =FALSE

关门->CLOSE_EVENT(Manuel Reset) TRUE 一开始OFF=FALSE


Console process

BARBER_NUM  3

BENCH_SIZE  10

g_nBench[BENCH_SIZE]

CRITICAL_SECTION g_cs

main thread

1,create 3 barber thread, g_cs, 清空 g_nBench, CUSTOMER_EVENT, CLOSE_EVENT, SEMAPHORE

  customerID=0

2.等待 CUSTOMER_EVENT 跟CLOSE_EVENT

 2.1 CLOSE_EVENT

  2.1.1 把g_nBench 清空 要用g_cs保护起来

        (Bench上的客人反正还没开始剪头发 可以直接离开)

  2.1.2 等待3个barber threads 结束

  2.1.3关门

 2.2CUSTOMER_EVENT;

    customerID++;

  2.2.1 检查 bench是否还有位置 如果bench满了

          => 让客人直接离开

  2.2.2 bench 还有位置 

         => 把客人放到bench最后面(要用g_cs保护起来)

        => ReleaseSemaphore(+1)


barber thread

1.等待CLOSE_EVENT 跟SEMAPHORE

  1.1 CLOSE_EVENT

      => Barber 下班离开 thread 结束

  1.2 SEMAPHORE

    1.2.1 从bench拉出第一,(如果这个人不是empty的话)修改bench(要用g_cs保护起来)

          

    1.2.2 开始剪头发(sleep 4s)

    1.2.3 剪头发完毕

-----------------------------------------------------------------------------------------------------------------------------------------

Initial Dialog:

g_hCustomer = CreateEvent(NULL, FALSE, FALSE, CUSTOMER); //OFF AUTO RESET

g_hClose=CreateEvent(NULL, TRUE, FALSE, CLOSE_EVENT);

if(!g_hCustomer || !g_hClose)

return FLASE;

--------------------------------------

Barber Dig OnBnClickOk:

SetEvent(g_hCustomer);


Bar Dig OnBnClikedCancel

SetEvent(g_hClose)






原创粉丝点击