关于BREW多线程雏形的想法

本文介绍了一个多线程应用实例,在该实例中,三个线程在特定计数点上执行休眠操作以让出时间片。通过这种方式,可以观察到线程间的交互与调度情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

总感觉不舒服,这个多线程,什么东西都需要自己控制。
以前也没有怎么接触过多线程这个东西,没什么经验,大家看看还有没有其他什么想法。

大概想法就是在i=2500或者i=5000或者i=7500的实现线程休眠 500微秒,然后可以把时间片分给其他线程。
大家看输出,可以看出来,基本上是这样的。

/* From src/thrdutil */
void IThread_Sleep(IThread *me,IShell *piShell, int nMS)
{
    AEECallback *pcb = ITHREAD_GetResumeCBK(me);
    ISHELL_SetTimerEx(piShell,nMS,pcb);
    ITHREAD_Suspend(me);
}

/*
*    pIThread1的回调
*/
void Cbk_Runnable1(IThread * pIThread, void *po)
{
    int i;
    TestFor * pMe = (TestFor *)po;
    if(NULL != pIThread)
    {
        DBGPRINTF("thread 1 started");
        for (i=0; i<10000; i++)
        {
            if ((2500 == i) || (5000 == i) || (7500 == i))
            {
                IThread_Sleep(pIThread, pMe->pIShell, 500);
            }
            DBGPRINTF("Thread 1 Count = %d",i);
        }
    } else
    {
        DBGPRINTF("Thread 1 start fail");
    }
}
/*
*    pIThread2的回调
*/
void Cbk_Runnable2(IThread * pIThread, void *po)
{
    int i;
    TestFor * pMe = (TestFor *)po;
    if(NULL != pIThread)
    {
        DBGPRINTF("thread 2 started");
        for (i=0; i<10000; i++)
        {
            if ((2500 == i) || (5000 == i) || (7500 == i))
            {
                IThread_Sleep(pIThread, pMe->pIShell, 500);
            }
            DBGPRINTF("Thread 2 Count = %d",i);
        }
    } else
    {
        DBGPRINTF("Thread 2 start fail");
    }
}
/*
*    pIThread3的回调
*/
void Cbk_Runnable3(IThread * pIThread, void *po)
{
    int i;
    TestFor * pMe = (TestFor *)po;
    if(NULL != pIThread)
    {
        DBGPRINTF("thread started3");
        for (i=0; i<10000; i++)
        {
            if ((2500 == i) || (5000 == i) || (7500 == i))
            {
                IThread_Sleep(pIThread, pMe->pIShell, 500);
            }
            DBGPRINTF("Thread 3 Count = %d",i);
        }
    } else
    {
        DBGPRINTF("Thread 3 start fail");
    }
}

XXX_HandleEvent中添加的部分

case EVT_APP_START:                        
    // Add your code here...
    {
        int nRtr;
        nRtr = ISHELL_CreateInstance(pMe->pIShell, AEECLSID_THREAD,
            (void **)&pMe->pIThread1);
        if (SUCCESS != nRtr)
            return FALSE;
        nRtr = ISHELL_CreateInstance(pMe->pIShell, AEECLSID_THREAD,
            (void **)&pMe->pIThread2);
        if (SUCCESS != nRtr)
            return FALSE;
        nRtr = ISHELL_CreateInstance(pMe->pIShell, AEECLSID_THREAD,
            (void **)&pMe->pIThread3);
        if (SUCCESS != nRtr)
            return FALSE;

        nRtr = ITHREAD_Start(pMe->pIThread1, 100,
            (PFNTHREAD)Cbk_Runnable1, (void *)pMe);
        nRtr = ITHREAD_Start(pMe->pIThread2, 100,
            (PFNTHREAD)Cbk_Runnable2, (void *)pMe);
        nRtr = ITHREAD_Start(pMe->pIThread3, 100,
            (PFNTHREAD)Cbk_Runnable3, (void *)pMe);
    }
    return(TRUE);

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值