在一个对话框里,有一个进度条,和一个按钮,当单击按钮的时候执行一下代码,先创建一个线程,然后调用GetCourse()函数,这个函数很耗时,需要一段时间才能返回,所以利用ProgressThread()线程控制进度调,可是在执行的时候一定要等到GetCourse()返回以后才能执行ProgressThread()线程里的代码,请问这是怎么回事啊,既然是多线程的,为什么还出现这样类似“阻塞”的现象呢?
按钮执行代码如下(部分):
..........
CWinThread *pThread=AfxBeginThread(ProgressThread,(LPVOID)this);
m_Wait.SetWindowText("处理中......");
int Result=GetCourse();
..........

解决方案 »

  1.   

    线程创建没有错误,这种原因是应为:
    虽然多线程可以实现几个线程同时执行,但是实际情况还是一个CPU处理一个任务,所以需要线程之间进行抢占,应为GetCourse()函数一直在执行,按道理应该线程在同一个优先权的前提下是抢占的几率是一样,但是实际情况执行完GetCourse()再执行ProgressThread的情况跟多!简单说就是CPU一直被GetCourse()函数占据!当然还有一种情况就是 优先权不一样,这种情况当然是优先权大的先运行!
      

  2.   

    对了,你可以在GetCourse()里加上Sleep(10)效果应该就能体现了!