用CreateThread创建线程的问题在侯捷翻译的 win32多线程设计书中说如果主线程以外的线程进行下面操作,应该使用多线程版的C runtime library,并使用_beginthreadex()1: 在c语言中使用malloc()和free(),或是在C++中使用new和delete
2: 调用stdio.h 或io.h中声明的任何函数,包括像fopen(),open(),getchar(),wirte().所有这些函数都用到共享的数据结构以及errno。
3:使用浮点变量和浮点运算函数。
4:调用任何使用静态缓冲区的runtime函数如asctime()我的问题是:DOWRD WINAPI FunProc(LPVOID)
{
float a;
cout<<a;
}
void main();
{
HANDLE hThread;
hThread=CreateThread(NULL,0,FunProc,NULL,0,NULL);}在线程FunProc中
1:使用float a,这个浮点数,这样也不行吗???2:使用printf("a=%d",a); 这样也不行吗???3:使用int a;cout<<a; 可以吧4: 是不是用VC写多线程,一律用_beginthreadex()代替CreateThread,是不是更和谐呢

解决方案 »

  1.   

    浮点用f,
    printf("a=%f",a); 多线程一般用_beginthreadex()可以线程安全等.
      

  2.   


    1.在Windows系统下_beginthread和_beginthreadex实际上也是调用CreateThread实现的,你可以调试跟踪到crt源码就知道了。因此就效率而言CreateThread比较高。2._beginthread和_beginthreadex是crt库,可以不依赖windows操作系统进行编译。
      

  3.   

    各位把我的1,2,3,4 再认真的回答一遍
    多谢了。如果在子线程中使用printf(),printf是stdio.h中的函数,就不能用CreateThread创建吧?
      

  4.   

    子线程还没运行完,主线程已经结束了,你应该这样改
    void main();
    {
    HANDLE hThread; 
    hThread=CreateThread(NULL,0,FunProc,NULL,0,NULL);
    while(TRUE)
    {
    Sleep(1000);
    }
    }
      

  5.   

    DOWRD WINAPI FunProc(LPVOID)
    {
    float a;
    cout<<a;
    }
    void main();
    {
    HANDLE hThread; 
    hThread=CreateThread(NULL,0,FunProc,NULL,0,NULL);
    WaitForSingleObject(hThread,INFINITE);
    CloseHandle(hThread);
    }