델파이 쓰레드 예제

Delphi 7, SQL Server 2005 및 ADO를 사용하는 Windows XP sp3.- 스레드는 일부 스레딩 코드를 작성하고 해당 코드와 아웃에 대한 경험을 얻을 때까지 다소 압도적입니다. 이 문서에서는 스레딩 및 동기화 기술을 소개합니다. Windows API 호출을 사용하여 실제로 작동하는 방법을 보여 드리겠습니다. 여러 파일에서 특정 문자열을 검색하는 예제를 작성했습니다. 스레드가 검색할 때 실시간 동기화된 정보가 기본 양식으로 전송됩니다. 물론 데이터는 다른 스레드 나 응용 프로그램에 보낼 수도 있습니다. 더 많이 생각할수록 스레딩의 힘을 더 많이 볼 수 있습니다. 나는 델파이에서 스레딩의이 물건으로 새로운. 따라서 데이터베이스에 대해 약간의 전화를 걸고 약간의 시간이 걸리는 간단한 쿼리 aplication을 만들기 위해 노력하고 있으므로 백그라운드 프로세스가 있고 인내심을 가져야한다는 것을 사용자에게 알리고 싶습니다. 나는 그들이 완료 할 때 스레드의 제어를수신하는 TerminateThread 메서드를 만들었습니다. 다른 스레드와 다른 것은 연결 문제입니다. 모든 스레드에 새 연결을 만들어야 하며 다른 사용자와 동일한 ADOConnections를 공유할 수 없습니다.

이 예제가 도움이 되기를 바랍니다. 스레드 중 하나를 주 스레드라고 합니다. 주 스레드는 응용 프로그램이 시작되면 운영 체제에서 만든 스레드입니다. 주 스레드는 사용자와 인터페이스하는 구성 요소를 업데이트하는 유일한 스레드여야 합니다. Delphi의 TThread 클래스에는 synchronize라는 메서드가 있으며, 우리가 원하는 모든 것을 했다면이 문서에 대한 필요가 없습니다. TThread를 사용하면 주 스레드(VCL의 스레드)와 동기화해야 하는 메서드를 지정할 수 있습니다. 동기화를 기다리는 데 시간을 할애할 수 있지만 밀리초가 중요한 시스템에서는 이 메서드를 사용할 수 없습니다. 스레드 웹에서 많은 예제를 찾을 수 있습니다. 스레드 내에서 ADO 연결을 사용하는 경우 유일한 특수 기능은 동일한 연결을 공유할 수 없다는 것입니다. 각 스레드는 자체 연결을 만들어야 하며 그렇지 않으면 동일합니다(다른 스레드와 동일한 규칙을 따라야 합니다).

자식 스레드가 « ShowMessage »에 대한 호출을 통해 사용자에게 응답을 제시하도록하여 결과를 주 스레드로 다시 전달하는 문제를 옆으로 밟았습니다. 이렇게 하면 기본 VCL 스레드와의 통신이 포함되지 않으며 ShowMessage 호출은 스레드 안전(및 대체)이 되므로 VCL은 계속 유지됩니다. 그 결과, 스레드 할당 할당에 대한 첫 번째 방법을 사용하고 스레드자체를 삭제할 수 있습니다. 그럼에도 불구하고 예제 프로그램은 스레드가 스스로 정리되는 한 가지 불쾌한 특징을 보여 줍니다: 일반 Delphi 응용 프로그램은 단일 스레드이므로 모든 VCL 개체가 해당 속성에 액세스하고 이 단일 스레드 내에서 메서드를 실행합니다. 응용 프로그램에서 데이터 처리 속도를 높이려면 하나 이상의 보조 스레드를 포함합니다. 만들기 및 재정의 실행으로 TThread 유형을 선언해야 한다는 것을 알고 있습니다… 등.. 하지만 그 이후로 나는 잃어버린 … 이 것을 잊어 버리고 TThread를 사용하는 경우 시작 시이 오류가 발생합니다: TThread.Synchronize는 주 스레드가 CheckSynchronize를 정기적으로 호출하도록 요구합니다. LCL은 루프에서 이를 수행합니다. LCL 이벤트 루프를 사용하지 않는 경우 직접 호출해야 합니다. Yup, TThread에서 상속 하는 새 형식을 선언: 여러 스레드가 응용 프로그램에서 실행 되는 경우 스레드 실행의 결과로 그래픽 사용자 인터페이스를 업데이트하는 방법에 대 한 질문이 발생 합니다.

대답은 TThread 클래스 동기화 메서드에 있다. TThread 클래스없이 스레드를 만들 때 항상 SysUtils 단위에서 BeginThread 함수를 사용합니다.

Les commentaires sont fermés.