Delphi,消息处理程序和全局变量thread-safety

时间:2013-05-12 15:32:06

标签: thread-safety queue postmessage

我在这个表单中有一个messagehandler:

procedure TMain_Form.form_message_handler(var MSG: TMessage);
begin
  case MSG.WParam of
   0: global_variable:=10;
   1: global_variable:=global_variable+100;
   end;
end;

几个线程会向它发送异步消息 - PostMessage。操纵全局变量(在这样的处理程序中)是安全的 - 我的意思是访问这些变量是安全的吗?我将计划仅在此处理程序内操作此全局变量。我认为它是安全的,因为处理程序处理的消息等待队列中的执行。我的假设是正确的吗?

1 个答案:

答案 0 :(得分:0)

不是,不。如果要通过发送异步消息。 PostMessage,(并不是一个坏主意 - 比apalling TThread.Synchronize好得多),非常努力地发布消息处理程序所需的所有数据,即。不要使用全局变量。如果你需要传达很多东西,可以在wParam / lParam中发布一个struct或object指针。

除非......真的没有,否则不要使用全局变量。

哦,还有一件事 - 不要使用全局变量。