哪位达人解释一下这段代码的作用? #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;}
#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;}
(NULL,0,ThreadFunc1,NULL,0,&dwThreadId); //创建线程::WaitForSingleObject(Thread1,INFINITE); //等待线程结束
::CloseHandle(Thread1); //关闭线程句柄
这个意思是不是 如果Thread1不为空 则返回啊 跟事件信号量什么的一样么to pavelalex
没实现什么 就是开启2个线程 然后结束掉 演示把
::WaitForSingleObject(Thread2,INFINITE);
::CloseHandle(Thread2);
就没有执行到
另外,为什么thread1和thread2会交替开启?
::WaitForSingleObject(Thread1,INFINITE); 上面是无限时间等待ThreadFunc1执行完毕,而此程序中ThreadFunc1是死循环,所以也就不会执行程序之后的语句了。
::WaitForSingleObject(Thread1, 1000);// 等待1秒
::WaitForSingleObject(Thread2, 1000); 上面可以结束程序,但是不推荐这样结束线程。你找本Windows线程设计的书好好看看吧。
::CloseHandle(Thread2); 就没有执行到
我感觉不会啊 要么就是thread2是空的 第2个进程没开启成功
也就是说这段代码就是让两个线程建立然后查看哪个在工作了?
CreateThread是立即返回但是::WaitForSingleObject(Thread1,INFINITE)不会呀!to pavelalex:
操作系统负责合理分配CPU的执行时间片来给线程用。假设时间片为10ms,那么ThreadFunc1执行完时间片后,不管内部执行到什么地方,均被OS强行挂起等待执行,OS将调度其它在等待执行的线程。你找本OS原理的书看看。也就是说这段代码就是让两个线程建立然后查看哪个在工作了?
A:可以这么说。这种机制是属于同步还是异步?
A:不懂你的意思。你说函数还是什么?
你这两个线程没有做同步,也就是两个线程毫无关系,所以理论上是异步的。
但是对于单核cpu利润上的异步并不是绝对的异步。cpu只会处理一个线程,至于执行哪个,是操作系统帮你调配的。
两个线程都是区查找数据?