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

今天看了一下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);现在要加上这条语句才可以。
时间: 2024-10-13 06:49:10

前置++和后置++的区别的相关文章

(转)前置++和后置++的区别

今天在阅读<google c++ 编程风格>的文档的时候,5.10. 前置自增和自减:有一句话引起了我的注意: 对于迭代器和其他模板对象使用前缀形式 (++i) 的自增, 自减运算符.,理由是 前置自增 (++i) 通常要比后置自增 (i++) 效率更高.于是我查了查前置++和后置++的区别. 注意:<more effective c++>条款8也专门叙述了问题.后来我发现,下面的文章基本就是它的翻版,哈哈 前置++和后置++的区别 <C专家编程>中有如下描述(P276

JavaScript运算符:递增递减运算符前置和后置的区别

从两段代码说起 var num1 = 2; var num2 = 20; var num3 = --num1 + num2; var num4 = num1 + num2; console.log(num1 +'-' + num2 +'-'+ num3 +'-' + num4) 将四个数分别打印是多少? var num1 = 2; var num2 = 20; var num3 = num1-- + num2; var num4 = num1 + num2; console.log(num1 +

i++与++i 递增递减运算符的前置与后置

C++Primer在132页的提示中说:除非必须,否则不用递增递减运算符的后置版本 很多教材都详细解释了递增递减运算符前置与后置的区别,我对他们的理解是:前置修改后直接赋值,而后置是先修改到临时变量,然后再赋值 下面的这份代码,第一个for循环使用后置版本,第二个使用前置版本,观察在实际使用中这两种样式的区别 for(int i=0;i<10;i++) cout<<i<<" "; cout<<endl; for(int i=0;i<10;

ThinkPHP - 前置操作+后置操作

前置操作和后置操作 系统会检测当前操作(不仅仅是index操作,其他操作一样可以使用)是否具有前置和后置操作,如果存在就会按照顺序执行,前置和后置操作的方法名是在要执行的方法前面加 _before_和_after_,例如: class CityAction extends Action{ //前置操作方法 public function _before_index(){ echo 'before<br/>'; } public function index(){ echo 'index<

android Camera 如何判断当前使用的摄像头是前置还是后置

现在 android 平台的智能手机一般都标配有两颗摄像头.在 Camera 中都存在摄像头切换的功能. 并且有一些功能前后置摄像头上会有所不同.譬如人脸检测,人脸识别,自动对焦,闪光灯等功能, 如果前置摄像头的像素太低,不支持该功能的话,就需要在前置摄像头上关掉该 feature. 那么是如何判断并切换前后置摄像头的呢? 我们先来看下 CameraInfo 这个类, 1 /** 2 * Information about a camera 3 */ 4 public static class

前置及后置++,--

关于前置及后置++,-- a++ (temp=a,a+=1,temp) //由此看出后置++产生临时变量 ++a (a+=1,a) 所以在程序中出现a++=10,(a++)++,++(a++)等试图改变后置++的值,是错误(编译错误)的 前置及后置++的用法 1.遇到逗号结束: 如:int a=10; int c=(a++,++a,a++); printf("%d\n",c); 在VC6中打印c的值为12,这里的(a++,++a,a++);为逗号表达式,从左向右运算,遇逗号后置++进行

ThinkPHP3.2基础教程(36)--控制器-前置和后置操作

前置和后置操作指的是在执行某个操作方法之前和之后会自动调用的方法,不过仅对访问控制器有效. 其他的分层控制器层和内部调用控制器的情况下前置和后置操作是无效的. 系统会检测当前操作是否具有前置和后置操作,如果存在就会按照顺序执行,前置和后置操作的定义方式如下: <?php namespace Home\Controller; use Think\Controller; class IndexController extends Controller{ //前置操作方法 public functio

关于前置++和后置++

一般认为前置++是先将变量的值加1,然后使用加1后的值参与运算:而后置++是先使用该值参与运算,然后再将该值加1. 先看第一个例子: package test; public class Plus_Test01 { public static void main(String[] args) { int i = 100; i = i++; System.out.println(i); } } 猜猜结果是什么? 接着看第二个: package test; public class Plus_Tes

前置和后置自增以及解引用重载函数(++、--、*)

#include<iostream> using namespace std; class INT { private: int m_i; public: INT(int i):m_i(i){} // 区分前置和后置自增重载函数的区别是是否有参数,以及参数的个数 // 如果是前置自增,比如++a,因为++符号前面没有变量,于是重载函数也就没有参数 INT& operator++() { ++(this->m_i); return *this; } const INT operat