2011-11-08 1 views
1

시도하기 전에 확인하고 싶습니다. 스레드 내에서 데이터베이스에서 데이터를 가져와야하는 몇 가지 스레드에서 작업하고 있습니다. 현재, 내가 본 모든 것을 기반으로, 스레드 내에서 새로운 데이터베이스 연결 (TADOConnection)을 생성하고 있습니다. 모든 스레드는 스레드 외부의 연결 개체를 얻을 수 있다면 좋을 것입니다. 기본적으로 각 스레드 실행을 위해 새로운 TADOConnection을 계속 만들고 싶지 않습니다.새 스레드를 만드는 대신 스레드와 데이터베이스 연결 공유

스레드 외부에 TADOConnection 속성을 게시하여 (따라서 스레드를 만들 때 할당 함) 스레드에서 해당 연결을 사용할 수 있습니까? 내가해야 할 일은 쓰레드 안에 TADODataSet을 생성하고이 TADOConnection에 연결을 할당하는 것이다. 나는 이것에 대해 약간의 iffy, 특히 스레드에서 ADO로 작업 할 때 CoInitialize 및 CoUninitialize를 호출해야하기 때문에.

+4

델파이의 TADOConnection은 thread-safe입니까? (http://stackoverflow.com/questions/1241844/is-delphis-tadoconnection-thread-safe) 또한, 항상 * CoInitialize/COM은 스레드 컨텍스트에 따라 다르기 때문에 COM을 사용하는 모든 개별 스레드에서 "CoUnitialize"를 수행해야합니다. –

+0

글쎄, 스레드/s가 방금 TADOConnection을 생성하고, 음, 앱 실행 기간 동안 걸려 있다면 문제가 될까요? 이 쓰레드를 계속 생성/파괴해야합니까? –

+0

이미 내 대답이 있습니다. 즉, 필요에 따라 이러한 스레드를 생성하고 있습니다. 즉, 한 번에 10 개의 스레드를 의미 할 수도 있고 매 30 분마다 하나의 스레드를 의미 할 수도 있습니다. 그들은 스스로 해방하고, 활동적으로 머물러 있지 않으며, 일단 끝나면 더 이상 쓸모가 없습니다. 나는 여러 번 그것을 피할 수 있는지 알고 싶었습니다. –

답변

1

대답은 아니오와 같습니다. TADOConnection (및 기타 ADO 구성 요소)은 COM 기반이므로 스레드간에 전달할 수 없습니다. 따라서이 경우 각 스레드 내에서 새로운 TADOConnection을 생성 할 수 밖에 없습니다. 계속 실행되는 스레드는 루프 할 때마다이 연결을 사용하지만 단일 실행 스레드는이 연결을 한 번만 사용합니다.

관련 문제