canvas does not allow drawing 错误的形成主要是绘图还未完成,函数或程序就已经退出,这种错误常常出现于多线程设计中,人们往往只关注主线程结束时其他线程是否结束了工作,而有的时候一个线程内的操作还未结束,线程就结束了,就会出现这个问题,举个例子大家来琢磨琢磨吧~~~ 有问题的程序: procedure fun1(); procedure fun2(); var Form1: TForm1; handle1,handle2: THandle; dw1,dw2: Cardinal; r: Cardinal; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin handle1 := CreateThread(nil,0,@fun1,nil,0,dw1); handle2 := CreateThread(nil,0,@fun2,nil,0,dw2); CloseHandle(handle2); end; procedure fun1(); begin while(1=1)do begin end; end; procedure fun2(); begin r:= WaitForSingleObject(handle1,1000); ShowMessage('sssss');///////////这里出错了!!!! CloseHandle(handle1); end; procedure TForm1.Button1Click(Sender: TObject); begin TerminateThread(handle1,4); end; end. 当按钮按下时,程序出错了,原因就是showmessage还未来得急绘制线程2就结束了 ShowMessage('sssss'); Sleep(1000);这样看看,问题“解决”了,就是这样。 |
|
来自: 昵称42262229 > 《软件开发》