在程序中用:CreateThread(nil,0,@ThreadFire,nil,0,ThreadID);
在双核、超线程的CPU运行时会出错(通常会在运行1-2个小时后出错),
而单核和非超线程的CPU运行几十个小时都一切正常。具体出错为:
“XXXXXXXX”内存,该内存不能为“read”。其中:
ThreadFire是一个循环执行的过程。

解决方案 »

  1.   

    运行时最好设置该线程的亲缘性
    这样可以确定该线程在哪个cpu里面跑
    在多cpu、多核中,会随机的获得不同的序列号.
    这就为我们根据cpu序列号来制作注册机带来了很大的麻烦。
    Windows 2000/xp允许设置进程和线程的亲缘性。
    换句话说,可以控制哪个C P U能够运行某些线程。这称为硬亲缘性。
    Windows提供了设置亲缘性的函数SetProcessAffinityMask 。
    使用它来控制获取指定cpu的序列号。
      

  2.   

    双核、超线程的CPU基本等同于多 cpu, 线程运行出问题一般都在同步上, 这时完全有可能一个线程操作中的某资源另一线程来读取
    不要去怀疑双核、超线程有问题,从代码上找出线程非局部变量,检查下是否正确使用了临界
      

  3.   

    谢谢楼上两位的帮忙。因为我是使用的工作者进程来后台进行某函数的运行(此函数是一个while(true)的无限循环函数),在运行时,也仅仅启动了一个线程,并且此函数读取的所有变量,主进程中都没有进行过任何操作。