打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
关于canvas does not allow drawing 错误的成因
                              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);这样看看,问题“解决”了,就是这样。

更多 0 分享到:
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
创建异形窗口[3]
delphi基础开发技巧
delphi 递归遍历TreeView树节点
Delphi打开网址链接的四种方法
delphi中当月第一天最后一天的函数等函数
Drawing outlined text
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服