여러 가지 응용 프로그램을 만들었습니다. 응용 프로그램 윈도우 (W [n] : TMyWindows)는 모두 동일하며 모두 그들과 연관된 개인 객체 클래스 인스턴스 (E : TMyObject)를 가지고 있습니다. 자식 창은이 개체를 통해 일부 메시지를 생성합니다. 메인 애플리케이션에서 메시지 내용에 따라이 메시지를 처리하는 두 개의 스레드를 만들었습니다.델파이 2006의 포스트 스레드 메시지 및 peekmessage 문제
while not terminated do
begin
...
if peekmessage(msg,0,thread1message_1,thread1message_n,pm_remove) then
process message
do other things;
end
: 내가 그런 일을 각 스레드의 실행 방법에있어서,
W[1].E.Service(thread1service)
W[2].E.Service(thread2service)
TMyObject.Service (ServiceType 자리가) 이제
case servicetype of
thread1service: PostThreadMessage(thread1id,...);
thread2service: PostThreadMessage(thread2id,...);
end;
입니다 : 예를 들어 다음과 같은 비동기 호출을 할 수 있습니다
두 번째 스레드가 메시지를받지 못하는 경우 모두 예외가 발생합니다. 이유가 궁금하십니까?
반드시 그렇지는 않습니다. 각 스레드에 임계 구역으로 보호되는 FIFO 대기열을 지정하고 대기 할 이벤트를 추가하십시오.FIFO가 비어 있지 않을 때 이벤트를 신호합니다. – mghie
나는 그것에 대해 생각했다. 그러나 주 스레드가 대기열에 많은 마사지를 걸면 작업 스레드는이를 처리해야하고 작업 스레드는 그의 루프에서 중요한 작업을 수행한다. 따라서 작업중인 스레드가 메시지를 처리하고 있다면 주 스레드는 새 메시지를 작동중인 스레드로 보내는 대신 덤프합니다. – zoomz
정말 슬픈 메시지 메시지 큐가 이상적이었을 것입니다. 나는 왜 그것이 당신을 위해 작동하지 않는지 궁금해. 나는 이것에 대한 나의 구현을 점검했고, 당신이 말하는 것을 잘못한 것처럼 보이지 않는다. :( – Nat