2.一个新的线程,传递的参数有几个char*,在起动线程的地发地方为他们传递参数,进到现成里边后:当按F5时一切正常,同样是Debug版,Ctrl+F5时这些char*为NULL(我用AfxMessageBox一步一步跟下来看到的),怎么回事?
3.用MemDC.h作成的自画类,Debug是正常,Release时,每当Dialog*第一次*出现时:有的Dialog一出现整个Dialog背景就变黑,有的有时候会变黑,有的从没有变黑过(可能是有时候会变黑的一个特例,现在只能通过显示的调用RedrawWindow()刷新一次Dialog解决)我保证MemDC没有问题(网上流行的版本),自画类也没有明显得区分Debug和Release的地方,只要我把自画类的对象去掉,就没问题。
16 个解决方案
#1
第二个问题可能是那个char*是在主线程里面分配的,并且在创建完线程后就删除了。这种情况有可能在子线程里使用这个变量时可能是NULL,也可能不是。
#2
可是我在主线程中已经把char*作为参数传给了子线程了。最奇怪的是F5时就正常,CTRL+F5时就失败。
#3
2.很可能是你把char*作成了局部变量.不同线程有各自的stack,局部变量不能共享的.要么用全局变量,要么用堆变量,就不会出问题了.
#4
谢谢,我明白第二个问题了
#5
up
#6
up
#7
down
#8
left
#9
right
#10
衰
#11
天灵灵、的灵灵,SB李洪痔快显灵
#12
第一个问题我感觉是你程序中有一个小问题,但boundchecker把它修复了,boundchecker有修复的功能
#13
o?我试试赶快~~
#14
>第一个问题我感觉是你程序中有一个小问题
小问题?呜呼。我的程序Release和Debug还算正常。
小问题?呜呼。我的程序Release和Debug还算正常。
#15
这年头什么事都得靠自己>:第三个问题也解决了:MemDC类的构造函数有一个鬼rect参数,缺省时为(0,0,0,0),该函数此时会给赋值为pDC->GetClipBox(&rect),如果使用MemDC的类在OnPaint中这样构造的话:
CPaint(dc);
CMemDC(&dc);
对于某写Style的Dialog就会在Release下黑屏(就是CMemDC中pDC->GetClipBox(&rect)闹得)
而写成
CPaint(dc);
CRECT rect;
GetClientRect(&rect);
CMemDC(&dc,rect);
就OK了。
TMD,DEBUG正常,Release黑屏,老子是用AfxMessageBox()一步一步Box出来的。
CPaint(dc);
CMemDC(&dc);
对于某写Style的Dialog就会在Release下黑屏(就是CMemDC中pDC->GetClipBox(&rect)闹得)
而写成
CPaint(dc);
CRECT rect;
GetClientRect(&rect);
CMemDC(&dc,rect);
就OK了。
TMD,DEBUG正常,Release黑屏,老子是用AfxMessageBox()一步一步Box出来的。
#16
看来第一个问题得问TMD微软了。
#1
第二个问题可能是那个char*是在主线程里面分配的,并且在创建完线程后就删除了。这种情况有可能在子线程里使用这个变量时可能是NULL,也可能不是。
#2
可是我在主线程中已经把char*作为参数传给了子线程了。最奇怪的是F5时就正常,CTRL+F5时就失败。
#3
2.很可能是你把char*作成了局部变量.不同线程有各自的stack,局部变量不能共享的.要么用全局变量,要么用堆变量,就不会出问题了.
#4
谢谢,我明白第二个问题了
#5
up
#6
up
#7
down
#8
left
#9
right
#10
衰
#11
天灵灵、的灵灵,SB李洪痔快显灵
#12
第一个问题我感觉是你程序中有一个小问题,但boundchecker把它修复了,boundchecker有修复的功能
#13
o?我试试赶快~~
#14
>第一个问题我感觉是你程序中有一个小问题
小问题?呜呼。我的程序Release和Debug还算正常。
小问题?呜呼。我的程序Release和Debug还算正常。
#15
这年头什么事都得靠自己>:第三个问题也解决了:MemDC类的构造函数有一个鬼rect参数,缺省时为(0,0,0,0),该函数此时会给赋值为pDC->GetClipBox(&rect),如果使用MemDC的类在OnPaint中这样构造的话:
CPaint(dc);
CMemDC(&dc);
对于某写Style的Dialog就会在Release下黑屏(就是CMemDC中pDC->GetClipBox(&rect)闹得)
而写成
CPaint(dc);
CRECT rect;
GetClientRect(&rect);
CMemDC(&dc,rect);
就OK了。
TMD,DEBUG正常,Release黑屏,老子是用AfxMessageBox()一步一步Box出来的。
CPaint(dc);
CMemDC(&dc);
对于某写Style的Dialog就会在Release下黑屏(就是CMemDC中pDC->GetClipBox(&rect)闹得)
而写成
CPaint(dc);
CRECT rect;
GetClientRect(&rect);
CMemDC(&dc,rect);
就OK了。
TMD,DEBUG正常,Release黑屏,老子是用AfxMessageBox()一步一步Box出来的。
#16
看来第一个问题得问TMD微软了。