我在这个表单中有一个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。操纵全局变量(在这样的处理程序中)是安全的 - 我的意思是访问这些变量是安全的吗?我将计划仅在此处理程序内操作此全局变量。我认为它是安全的,因为处理程序处理的消息等待队列中的执行。我的假设是正确的吗?
答案 0 :(得分:0)
不是,不。如果要通过发送异步消息。 PostMessage,(并不是一个坏主意 - 比apalling TThread.Synchronize好得多),非常努力地发布消息处理程序所需的所有数据,即。不要使用全局变量。如果你需要传达很多东西,可以在wParam / lParam中发布一个struct或object指针。
除非......真的没有,否则不要使用全局变量。
哦,还有一件事 - 不要使用全局变量。