哪位达人解释一下这段代码的作用? #include "stdafx.h"
#include <Windows.h>#include "atlbase.h"
#include "atlstr.h"
#include "strsafe.h"#include <iostream>using namespace std;DWORD WINAPI ThreadFunc1(HANDLE Thread)
{
int i = 0;
while (1)
{
cout<<"First"<<endl;
}
return 0;   // thread completed successfully
}DWORD WINAPI ThreadFunc2(HANDLE Thread)
{
int j = 0;
while (1)
{

cout<<"Second"<<endl;
}
return 0;   // thread completed successfully
}int _tmain(int argc, _TCHAR* argv[])
{
HANDLE Thread1,Thread2; DWORD dwThreadId;
Thread1=::CreateThread
(NULL,0,ThreadFunc1,NULL,0,&dwThreadId); Thread2=::CreateThread
(NULL,0,ThreadFunc2,NULL,0,&dwThreadId); ::WaitForSingleObject(Thread1,INFINITE);
::CloseHandle(Thread1);
::WaitForSingleObject(Thread2,INFINITE);
::CloseHandle(Thread2);
return 0;}

解决方案 »

  1.   

    DWORD   WINAPI   ThreadFunc2(HANDLE   Thread) //线程处理函数Thread1=::CreateThread 
    (NULL,0,ThreadFunc1,NULL,0,&dwThreadId); //创建线程::WaitForSingleObject(Thread1,INFINITE); //等待线程结束
    ::CloseHandle(Thread1); //关闭线程句柄
      

  2.   

    ::WaitForSingleObject(Thread1,INFINITE);   //等待线程结束 
    这个意思是不是 如果Thread1不为空 则返回啊 跟事件信号量什么的一样么to pavelalex 
    没实现什么 就是开启2个线程 然后结束掉 演示把
      

  3.   

    发现
    ::WaitForSingleObject(Thread2,INFINITE); 
    ::CloseHandle(Thread2); 
    就没有执行到
    另外,为什么thread1和thread2会交替开启?
      

  4.   

    两个线程是死循环,由CPU自动分配时间片来轮流执行。
    ::WaitForSingleObject(Thread1,INFINITE); 上面是无限时间等待ThreadFunc1执行完毕,而此程序中ThreadFunc1是死循环,所以也就不会执行程序之后的语句了。
    ::WaitForSingleObject(Thread1, 1000);// 等待1秒 
    ::WaitForSingleObject(Thread2, 1000); 上面可以结束程序,但是不推荐这样结束线程。你找本Windows线程设计的书好好看看吧。
      

  5.   

    从你的程序上看 每个线程只启动一次 应该不会交替开启  你说的不是交替输出把!::WaitForSingleObject(Thread2,INFINITE);   
    ::CloseHandle(Thread2); 就没有执行到 
    我感觉不会啊 要么就是thread2是空的 第2个进程没开启成功
      

  6.   

    to bluetooth_2001 ::CreateThread 不是立即返回吗
      

  7.   

    两个线程都会一直运行::WaitForSingleObject(Thread1,INFINITE);一直等待线程结束,下面的代码执行不到
      

  8.   

    to bluetooth_2001 线程轮流执行是CPU自动分配时间片来执行吗?
    也就是说这段代码就是让两个线程建立然后查看哪个在工作了?
      

  9.   

    to duoniduoni:
    CreateThread是立即返回但是::WaitForSingleObject(Thread1,INFINITE)不会呀!to pavelalex:
    操作系统负责合理分配CPU的执行时间片来给线程用。假设时间片为10ms,那么ThreadFunc1执行完时间片后,不管内部执行到什么地方,均被OS强行挂起等待执行,OS将调度其它在等待执行的线程。你找本OS原理的书看看。也就是说这段代码就是让两个线程建立然后查看哪个在工作了?
    A:可以这么说。这种机制是属于同步还是异步?
    A:不懂你的意思。你说函数还是什么?
      

  10.   

    你这个代码两个线程是两死循环,所以程序在WaitForSingleObject(Thread1,INFINITE)会一直等待,因为Thread1永远没有返回的时候。
    你这两个线程没有做同步,也就是两个线程毫无关系,所以理论上是异步的。
    但是对于单核cpu利润上的异步并不是绝对的异步。cpu只会处理一个线程,至于执行哪个,是操作系统帮你调配的。
      

  11.   

    to jacklzw88若是做同一操作,那么是异步还是同步
    两个线程都是区查找数据?