在同一个时间片??如果时间片用完了,cpu就会被剥夺,好象什么办法也无济于事吧

解决方案 »

  1.   

    在某一时间片里只能有一个线程处于激活状态,要让多个线程在一个时间片内同时执行好像在Windows下不太可能,Windows是抢占式的操作系统,而不是一个真正的多任务系统,可能你的想法在真正的多任务系统上可以实现吧。:)
      

  2.   

    呵呵,那就提高你的线程的优先级吧,用setpriority函数
      

  3.   

    事务处理??这又不是数据库,好象没有这样的概念吧,就象 sam1111(我倒) 所说,windows是抢占式的操作系统,你不可能打破这个规则,如果是因为同步的问题,那么可以用互斥量,信号量等方法解决的
      

  4.   

    Win32设计时就避免这种情况的发生,否则就不叫preemptive了。
    如果允许你说的情况,CPU完全被一个用户线程占用,那么内核代码还执不执行?如果用户由于疏漏,刚好是个死循环怎么办?操作系统绝望?重起?
    无论用什么办法,你都只能是相对的多获得一些CPU时间,但绝对不可能完全占有CPU。你甚至可以用野蛮的办法将其他用户线程统统挂起(我不知道这会导致什么结果),但对内核线程你无能为力。
      

  5.   

    看到书上有个叫"临界区"的东东
    CRITICAL_SECTION cs;
    InitializeCriticalSection(&cs);EnterCriticalSection(&cs);
    ......
    LeaveCriticalSection(&cs);试了一下,是NT上的东西,98上不能用,还得回去再试也不知道NT4.0行不行, 请问各位大侠98上有没有此类似的东西?
      

  6.   

    98 也支持多线程,当然有。
    不知你用不用MFC
    CCriticalSection对象也许可以满足你的要求
      

  7.   

    不可能吧,windows是个抢占式多县城的,县城的调度是由操作系统完成的,不能够保证县城在什么时候运行,
      

  8.   

    不就是同步机制,EnterCriticalSection(&cs)98下可以的。
    还有mutex,event等等
      

  9.   

    jyf7862(jyf)
    CCriticalSection 在MSDN中可以查到, 但还是没闹懂, VC++中也看不出,请进一步指教.tar(GPS) 
    EnterCriticalSection(&cs)函数是有的,不过
    error LNK2005: "struct _RTL_CRITICAL_SECTION  cs" (?csOutput@@3U_RTL_CRITICAL_SECTION@@A)...
    请进一步点拨
      

  10.   

    #include "stdafx.h"
    #include "windows.h"
    int main(int argc, char* argv[])
    {
        CRITICAL_SECTION cs;
        InitializeCriticalSection(&cs);
        
        EnterCriticalSection(&cs);        LeaveCriticalSection(&cs);
        
        printf("Hello World!\n");
    return 0;
    }I tried the sample above,and no error occured.
    about syncronization,you can see msdn->platform sdk document->base service->
    dll,process,thread->sycronization
      

  11.   

    tar(GPS)
    首先,多谢
    上面的程序,我这也编译通过了可是,在一个MFC程序中该怎么做呢?可能我的基本功太差还望多指点.
      

  12.   

    你问题的答案是:
    无法强制一段程序在同一个时间片里执行。
    你遇到的问题也许是线程访问临界量的问题吧。
    用MFC的CCriticalSection对象假设临界量是类CSource的数据成员,你的两个线程通过该类的ChangeMember()函数改变该临界量的值。
    首先,你为该类添加一个CCriticalSection类型的成员变量m_Section.
    然后,在ChangeMember()函数中添加如下代码
    ChangeMember()
    {.....
    CSingleLock sLock(&m_Section);
    sLock.Lock();
    //以下添加改变临界量的代码
    .........
    //以上添加改变临界量的代码
    sLock.Unlock();.....
    }你的两个线程就可以通过调用ChangeMember函数改变临界量,而不发生非正常的情况了