beginthreadex和CreateThread区别

 

线程对于初学者还说可能觉得很高深,这可以理解。对于某些有经验的程序员来说,可能觉得又太简单,我觉得如果认为线程很简单的人,都是没有理解线程,线程里面涉及的东西太多,包括内存,初始化,线程同步等。我打算以QA的形式来写这篇文章。


              Q:为什么书上说要以_beginthreadex来替代CreateThread?

A:好了,一直用API CreateThread来创建线程的同志们要注意了,你可能会说我一直用这个API来创建线程,工作刚刚的,一点问题都没有。如果真是这样的话,我只能说是你运气太好了。在_beginthreadex的内部,它调用了CreateThread来创建线程,Windows始终用CreateThread来创建线程。在调用CreateThread之前,beginthreadex它做了很多初始化的工作,所以它比CreateThread创建的线程更加安全。


              Q:为什么要用两个相同功能的函数来对待单线程和多线程序程序呢?

A:这里就有一定的历史原因了,标准C语言的库在是1970年左右发明的,而在那时候,线程的概念尚未出现在任何一个操作系统上。但是,线程毕竟是出现了,让我们来看看下面这个例子,来说明以前的CRT为什么不支持多线程:

BOOL fFailure = (system("NOTEPAD.EXE README.TXT") == -1); 
       if (fFailure)
       { 
              switch (errno)
              {
              case E2BIG:
                     // Argument list or environment too big 
                     break; 
              case ENOENT: 
                     // Command interpreter cannot be found 
                     break; 
              case ENOEXEC: 
                     // Command interpreter has bad format 
                     break; 
              case ENOMEM: 
                     // Insufficient memory to run command 
                     break;
            

你可能感兴趣的:(windows编程)