前置++和后置++的区别
今天看了一下windows c中多线程编程,写了一小段程序。死活跑出结果,先贴一下我的代码
1 #include <windows.h> 2 #include <iostream.h> 3 #include <string> 4 5 using namespace std; 6 7 DWORD WINAPI countThread1(LPVOID argv);//声明一个线程函数 8 DWORD WINAPI countThread2(LPVOID argv); 9 10 int main(){ 11 //创建两个线程 14 HANDLE handle1 = CreateThread(NULL, 0, countThread1, NULL, 0, NULL); 16 17 WaitForSingleObject(handle1, INFINITE); 24 25 26 return 0; 27 } 28 //下面是两个线程函数 29 DWORD WINAPI countThread1(LPVOID argv){ 30 int i = 0; 31 cout<<"i am in"<<endl; 32 while(i++){ //这里开始没看出来有错,开始没注意这段代码,以为是main里面出错了。后面输出i am in我知道这段代码有问题了 33 if(10 == i) 34 ExitThread(0); 35 cout<<"this is thread2 and i = "<<i<<endl; 36 Sleep(1000); 37 } 38 39 return 0; 40 } 41 DWORD WINAPI countThread2(LPVOID argv){ 42 int i = 0; 43 while(i++){ 44 if(10 == i) 45 ExitThread(0); 46 cout<<"this is thread2 and i = "<<i<<endl; 47 Sleep(1000); 48 } 49 return 0; 50 }
while循环中,因为i = 0为初始条件,后置的i ++会先判断条件,i = 0不会执行while语句。将i++变成++i就好了
1 #include <windows.h> 2 #include <iostream.h> 3 #include <string> 4 5 using namespace std; 6 7 DWORD WINAPI countThread1(LPVOID argv);//声明一个线程函数 8 DWORD WINAPI countThread2(LPVOID argv); 9 10 int main(){ 11 //创建两个线程 12 // int i = 0; 13 // while(i < 50){ 14 HANDLE handle1 = CreateThread(NULL, 0, countThread1, NULL, 0, NULL); 15 // HANDLE handle2 = CreateThread(NULL, 0, countThread2, NULL, 0, NULL); 16 17 WaitForSingleObject(handle1, INFINITE); 18 // WaitForSingleObject(handle2, INFINITE); 19 20 //CreateThread(NULL, 0, countThread2, NULL, 0, NULL); 21 //Sleep(50000); 22 23 // } 24 25 26 return 0; 27 } 28 //下面是两个线程函数 29 DWORD WINAPI countThread1(LPVOID argv){ 30 int i = 0; 31 cout<<"i am in"<<endl; 32 while(++i){ 33 if(10 == i) 34 ExitThread(0); 35 cout<<"this is thread2 and i = "<<i<<endl; 36 Sleep(1000); 37 } 38 39 return 0; 40 } 41 DWORD WINAPI countThread2(LPVOID argv){ 42 int i = 0; 43 while(++i){ 44 if(10 == i) 45 ExitThread(0); 46 cout<<"this is thread2 and i = "<<i<<endl; 47 Sleep(1000); 48 } 49 return 0; 50 }
这里就会每秒输出,一条信息
ps:
WaitForSingleObject(handle1, INFINITE);现在要加上这条语句才可以。
Please call me JiangYouDang!