在VC6下试了,没问题。按说不应该出现你所说的错误啊,0内存就是NULL,这里也没有指针啊把CloseHandle(thrhandle); 放在main的最后看一下

解决方案 »

  1.   

    把CloseHandle(thrhandle); 放在main的最后看一下
    =======
    和这个应该没关系
      

  2.   

    cout是被多个线程使用的,需要并发控制
      

  3.   

    thrhandle=CreateThread(NULL,0,ThreadProc,NULL,0,NULL); 
    if(thrhandle != NULL)
    {
    ::TerminateThread(thrhandle, 1);
    CloseHandle(thrhandle);
    }
    加上这个看看,线程退出要注意
      

  4.   

    对变量i进行线程同步,最简单的改动方法就是
    把i++ 改成::InterlockedIncrement(&i)或::InterlockedExchangeAdd(&i, 1)
      

  5.   

    大家好,thanks!  我对这个程序做了线程同步,能够正常运行了,但是很奇怪, 上面的代码在书中作者的电脑上怎么能够正常运行呢,而且二楼gg606也说在 vc6上运行没有问题,不知gg606的电脑是不是单核的,我的电脑上怎么就不能正常运行呢,我的电脑是双核的,这本书是2006年出版的,那时国内是不是还没有双核电脑呢,这个程序的运行问题跟电脑单核和双核有什么关系吗?
      

  6.   

    我的电脑确实是单核的。
    就这个程序本身来说,是不够严谨,没有做线程同步,但我想作者举这个例子不是作为反面教材的吧?
    还有在你机子上产生的"0x004031c9"指令引用"0x00000000"内存的错误又怎么解释呢?还有双核或多核的PC上多线程怎么调度,怎样利用多线程,最大程度发挥其优势,也是一个值得研究的课题哈。
      

  7.   

    我的电脑确实是单核的。
    就这个程序本身来说,是不够严谨,没有做线程同步,但我想作者举这个例子不是作为反面教材的吧?
    还有在你机子上产生的"0x004031c9"指令引用"0x00000000"内存的错误又怎么解释呢?还有双核或多核的PC上多线程怎么调度,怎样利用多线程,最大程度发挥其优势,也是一个值得研究的课题哈。
      

  8.   

    在多核系统上,线程能实现真正意义上同时执行,所以完成同一个功能,
    多线程的效率会比单线程高,但单核系统上,线程不是同时执行的,
    只是CPU时间片的轮询而已,