这一篇想记录一下我所遇到的一些问题。

     C++和C#之间很大的不同在于C++会更加注重底层的东西,而C#把底层完全封装了起来,我们只需要考虑自己的代码。也就是我老喜欢说的C++总是断在神奇的地方,一般报错的位置都是在底层,完全不知道自己代码到底错在哪啊摔!

     其实一般来说写C++的话自己的逻辑错误或者一点代码上的小失误真的很难发现,尤其是C++界四大难调bug,宏替换、多线程、内存泄漏和死锁。c++调试bug的话就只能是一个模块一个模块的屏蔽,下断点F11了。用C++写代码的话明显草稿纸变成必需品了啊!

    有一些错误其实并不是我们代码的逻辑出现了问题,而是我们没有去给它设置错误处理,也就是代码健壮性的问题。

    这里就是记录一下我自己所遇到的一些问题和解决过程吧。

    1.空画刷问题。

      我的界面很多的图片都是png图片,直接放在res下载入的,而不是像载入位图那样载入的,不用位图的其中一个原因也是位图太耗内存了。这种动态载入的方式如果说你的res中没有你所需要的图片的话载入并不会出现问题,而你要使用的时候就会报错说画刷不能为空。既然知道了原因当然很好解决,为空就return就行,但是当时去找这个问题也着实花了不少时间┑( ̄Д  ̄)┍

    2.停止程序

      涉及到多线程的话想要终止程序直接kill进程是非常不科学的,必须要有一个信号,当这个信号发生变化的时候其他线程结束自己的本次循环之后退出,一定不能强制退出而是由线程自己结束_endthreadex(0)。

    3.下载失败

     这个也是我自己经验不足吧,因为微端涉及到下载多个文件的问题,下载完了之后才能进入游戏,可是如果我有一个文件甚至多个文件下载失败的话虽然整个程序不会报错但是是进入不了游戏的,所以也就有了之前所提到过的递归下载,如果下载失败的话就重新下载直到成功,但是因为是递归就必须要有退出递归的条件,也是很多刚开始写递归的人会出现死循环的问题,我设置的是十次,如果十次还不成功那就messagebox给用户咯。

     用C++写代码的话必须要考虑到各种可能性,保证你的代码不会因为用户的各种操作导致程序崩溃,用过了C#直接try不怕出错再用C++真的不太习惯。不过C#的单例模式挺好用可以搬到C++中来。再有就是内存问题,new或者malloc出来的一定要释放,写太久C#就容易忽略这个问题了,提醒下自己。