0

我有一个如下形式的消息处理程序:

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。操作全局变量(在这样的处理程序中)是否安全 - 我的意思是访问这些变量是安全的?我将计划仅在此处理程序内操作此全局变量。我认为它是安全的,因为处理程序处理的消息在队列中等待执行。我的假设是否正确?

4

1 回答 1

0

不是真的,不。如果您要通过发送异步消息。PostMessage,(并不是说这是一个坏主意——比令人震惊的 TThread.Synchronize 好得多),非常努力地发布消息处理程序所需的所有数据,即。不要使用全局变量。如果您必须传达很多东西,请在 wParam/lParam 中发布结构或对象指针。

不要使用全局变量,除非……真的什么都没有。

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

于 2013-05-13T23:39:33.037 回答