이 같은 형태의 하나 개에 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를합니다. 이러한 핸들러 내에서 전역 변수를 조작하는 것이 안전합니까?이 변수에 대한 액세스가 안전하다는 의미입니까? 나는이 핸들러 내에서만이 전역 변수를 조작 할 계획이다. 큐에서 실행을 기다리는 핸들러가 처리하는 메시지 때문에 안전하다고 가정합니다. 내 가정이 맞습니까?
@Maritn James : 예, 처리기에 정보를 보내기 위해 전역 변수를 사용하지 않습니다. 그 대신, 나는 wParam/lParam 내부의 데이터 구조체에 대한 포인터를 사용한다. (아마도 내 질문으로는 충분하지 않다 - 미안하다.) l/Param을 통해 hadler에게 정보를 보낸 후이 처리기 내에서만 전역 데이터를 유지하려고합니다. 나는 모든 결과를 하나의 전역 변수로 계산하고 임계 영역을 사용하여 작성합니다 (충분한 짧은 시간 - 단 하나의 변수 만 보장합니다). 이 변수는 tcp 통신을 사용하는 다른 하나의 쓰레드가 (동일한 임계 영역을 사용하여) 사용할 수 있습니다. 일반적으로 맞습니까? – Artik