• 前置++和后置++的区别


    今天看了一下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);现在要加上这条语句才可以。
  • 相关阅读:
    用react+redux+webpack搭建项目一些疑惑
    ajax基本原理实现
    jsonp详细原理之一
    因为文件共享不安全,所以你不能连接到文件共享
    python xml模块
    python os模块
    python tickle模块与json模块
    python datetime模块
    python sys模块
    python time模块
  • 原文地址:https://www.cnblogs.com/luckygxf/p/4020975.html
Copyright © 2020-2023  润新知