문제

델파이의 크로스 스레드 커뮤니케이션에 대한 문서가 있습니까? 창이없는 스레드에 메시지를 보낼 수있는 방법은 무엇입니까?

도움이 되었습니까?

해결책

표준 메시지 루프를 구현하는 스레드로 (Windows) 메시지를 보낼 수 있으며, 이는 창 핸들이 실현되면 자동으로 생성됩니다.

그러나 스레드와 통신하기 위해 메시지를 사용할 필요는 없습니다. 이벤트 객체 (VCL의 Tevent)를 기다렸다가 스레드가 함수를 수행 할 때이 이벤트를 알리십시오.

그러나 당신이 멀티 스레딩을 처음 접한다면 - 학습 효과를 원하지 않는 한, 스스로이 모든 세부 사항을 다루지 마십시오. 그냥 사용하십시오 omnithreadlibrary 그리고 그것으로 끝났습니다. 당신이 그것을 사용하는 방법을 알게되면 내부를 파헤쳐 배울 수있는 것이 많습니다.

편집하다:

또한 답변을 참조하십시오 이 질문 매우 유사합니다.

편집 2 :

[omnithreadlibrary]가 무엇을 더 쉽게하고 어떤 비용을 지불합니까?" 나는 당신이 직접 확인하는 것만 조언 할 수 있습니다. 즉, 당신이 최소한 Delphi 2007을 사용하는 경우입니다. 개념을 설명하기위한 몇 가지 샘플이 있지만 빠른 "실제"예를 들어 살펴볼 수 있습니다. 이 블로그 게시물 -이를 위해 라이브러리를 설치할 필요조차 없습니다.

또한 멀티 스레딩에 라이브러리를 사용하려면 특정한 믿음의 행동이 필요하다는 데 동의합니다. Otoh는 VCL이 제공하는 것과 관련이 없습니다. 샘플 코드는 여전히 잘못된 동기화 () 호출을 사용합니다. 다중 스레드 프로그래밍에 훨씬 더 적합한 Thread-Safe Producer-Consumer-Queues와 같은 것에 대한 지원은 없습니다. 그리고 당신이 VCL이 제공하는 것보다 멀티 스레드 프로그램에 더 견고한 기초가 필요하다는 데 동의한다면, 왜 특정 휠을 재창조합니까?

도서관 사용 비용에 관해서 : 당신은 그것이 당신에게 충분히 빠른지 스스로 시간을 내야합니다. 그것은 좋은 방식으로 스레드 간의 커뮤니케이션을 추출하지만 모든 추상화 비용은 성능을 분명히 비용을 지불합니다.

결국 그것이 당신을위한 것이 아니라고 결정했다면 - 코드를 직접 작성하십시오. 나는 Delphi 4에서도 똑같이했으며, 거의 10 년 동안 그 코드를 사용해 왔습니다. 그리고 내가 찾은 버그의 양과 그 당시에 경험 한 코너 케이스로 판단하면, 나는 멀티 스레딩에 새로운 사람에게 확실히 조언 할 것입니다. ~ 아니다 그것들을 위해 그들 자신의 라이브러리 코드를 작성하십시오. 만약 너라면 정말 정말 원하고, 규칙을 가져 가십시오 이 게시물 심장으로.

다른 팁

질문 델파이 멀티 스레딩 메시지 루프 또한 스레드 간의 통신의 몇 가지 예가 포함되어 있습니다

스레드 객체에 대한 참조가있는 경우 직접 호출하고 절차 저장 정보 또는 그에 따라 업데이트 할 수 있습니다. 분명히 당신은 스레드 안전 방식으로 일을 조심해야합니다.

또는 스레드가 바쁘지 않을 때 통신하는 중앙 제어 객체를 사용할 수 있습니다. 스레드가 특정 목적을 가진 앱이 있으며 스레드 ID를 할당합니다. 모든 스레드는 메시지 ID와 함께 메시지를 "게시"하고 매개 변수의 문자열을 다른 스레드 -ID에 다음 작업을 수행 할 수 있습니다. 다른 스레드는 여가에서 그것을 선택하고 그에 따라 행동합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top