IDE:VC6.0
#include <stdio.h>
#include <windows.h>DWORD WINAPI ThreadProc(LPVOID lpParam) {
for(int i = 0 ; i < 10 ; ++i)
printf("I am from a thread , count = %d\n" , i) ;
return 0 ;
}
int main(int argc , char *argv[]) {
DWORD dwThreadID ;
HANDLE hThread ;
hThread = ::CreateThread(NULL , NULL , ThreadProc , NULL , 0 , &dwThreadID) ;
printf("Now a thread start , id = %d\n" , dwThreadID) ;
::WaitForSingleObject(hThread , INFINITE) ;
return 0 ;
}上面这个创建线程的简单程序,运行时却是不确定的,printf("Now a thread start , id = %d\n" , dwThreadID) ;这个语句有时会执行两次,这时在VC下,我在cmd下执行编译完的程序时,每次都输出两句,创建的线程即使和主线程并发也不应该有两次输出啊,请解惑。
好久没来了,发个100分吧,

解决方案 »

  1.   

    这是正常的,多执行几次就有可能出现这种情况 .
    因为CPU是分时间片执行各线程的.在不同的环境中,线程"抢占"时间片的情况名不相同.所以可能你的线程得到2次时间片的执行机会,而你的主线程才得到一次,所以就会出现你说的那种情况.
      

  2.   

    既然用了线程, 就应该用多线程的库, 否则有些C函数会问题.选项在:
    project->project setting->c/c++
    category中选code generation, use run-time library中选debug multithread
      

  3.   


    #include <stdio.h>
    #include <windows.h>
    HANDLE mutex;
    DWORD WINAPI ThreadProc(LPVOID lpParam);int main() 
    { mutex=::CreateMutex(NULL,FALSE,NULL);
        DWORD dwThreadID ;
        HANDLE hThread ;
        hThread = ::CreateThread(NULL , NULL , ThreadProc , NULL , 0 , &dwThreadID) ;
        printf("Now a thread start , id = %d\n" , dwThreadID) ;
        ::WaitForSingleObject(hThread , INFINITE) ;
    ::WaitForSingleObject(mutex , INFINITE);
    CloseHandle(hThread);
    CloseHandle(mutex);
        return 0 ;
    }DWORD WINAPI ThreadProc(LPVOID lpParam) 
    {
    ::WaitForSingleObject(mutex,INFINITE);
        for(int i = 0 ; i < 10 ; ++i)
            printf("I am from a thread , count = %d\n" , i) ;
    ::ReleaseMutex(mutex);
        return 0 ;
    }
      

  4.   

    把编译器改成支持多线程的。我估计你用的是VC6,这个问题在CSDN问很多遍了
      

  5.   

    把编译器改成支持多线程的。我估计你用的是VC6,这个问题在CSDN问很多遍了
      

  6.   

    printf("Now a thread start , id = %d\n" , dwThreadID) ;这个语句有时会执行两次
    这个是库的问题