델파이로 처음 프로그램을 짰는데. 대충 내용은 이렇습니다.
메인 프로그램에서 화면을 관리하고 어떤 액션이 들어오면 (일례로 외부장비의 start버튼) thread를 생성해서 그 일을 처리합니다. 물론 메인 화면은 수치들을 보여주기만 하구요. thread가 끝나면서 현재 상태를 보여줍니다.
standard db를 사용하구요. 근데 이게 무작위로 시스템이 홀드되면서 현재 열어 놓은 db가 날라갑니다. 물론 프로그램은 작동이 안되구요. 동적으로 메모리를 쓴것도 없고 전체순서가 아주 단순하거든요. 근데 이게 아침부터 수행을 해놓고 저녁때쯤 보면 맛이 갈때가 있고 어쩔때는 몇일 있다가 그러기도 하구요. 정말 돌아버리겠습니다. thread를 생산했다가 죽이고 이걸 많이 해서 그런가요?
어떠한 부분을 살펴보아야 할까요? thread는 ... 자동으로 해제해주는거를 만들면서 true로 만들어주었습니다. 일단 동작되면 db작업은 안하구요. 액션이 끝나야 db작업을 합니다. 무슨 말이라도 좋으니 조언좀 해주세요. 어디를 본살펴보라던가...
에러는 "응용프로그램 오류..."라고 나오거든요. 제가 C/C++로 짤때는 보통 메모리쪽만 아니면 에러가 안나오는데... 지금 짠건 메모리 할당할게 없어서 다 배열로 처리했거든요. 입출력 갯수가 확실해서요. 근데도 프로그램이 죽는걸 보면 (랜덤하게) 어디에 메모리가 열나 쌓이던가...하는거 같은데.
db처리는 다음과 같이 했습니다.
Datasource, Query를 사용해서 정해진 db를 읽습니다. 프로그램 로딩시에요.
Query1.SQL = "select * from table_main"
현재 선택된 놈에 대한 필드들을 읽어와서 변수에 세팅을 합니다. 그리고 외부 입력이 들어오면 thread를 생성하고 세팅된 변수에 따라 액션을 수행합니다. 이게 끝나면 화면에 그 결과를 보여주고요.
start를 해서 수행중에 물론 stop을 눌러 정지를 시킬수 있습니다. 그러나 이경우도 처음 start누른것처럼 행동하게 되어 있거든요. 지금까지 수행한건 없어지고 처음부터 행동을 하면 되거든요....
도와주세요. 어디를 봐야 할지 정말 미치겠습니다. 메모리 디버깅은 어떻게 해야 하는지...그리고 외부기기에 따른 라이브러리는 장비살때 주었거든요. 혹 이놈에서 세는걸까요? 3일을 잠을 못잤습니다. 이것때문에요.
사실 VC++ 로 개발 할 때보다 델파이로 하면 훨씬 Easy 하게 할수 있습니다.
하지만, 공통코드를 델파이가 대신 적어 줄 뿐 하는 일은 VC++ 과 같습니다.
혹시 DB Connection 이 너무 많이 열린게 아닐까여? Thread 에서 작업이 끝난 후 DB Server 와의 Connection 을 온전하게 끊는가요?
그리고 Thread 를 쓰신다고 하셨는데, DB 작업이 Thread 에서 돌려면 Session 을 Thread 에서 생성해야 합니다. Thread 에서 메인의 Session 을 기냥 가져다 쓰면 동시에 필드 수정이 발생하면서 에러가 발생할 수 있습니다.
그 부분은 VC++ 과 델파이가 동일합니다. 아직 델파이가 익숙하지 않다고 하시니 VC++ 로 DB 작업을 Thread 로 돌리는 코드를 찾아 보시고, 델파이로 하는 코드를 찾아서 비교해 가며 사용하시면 될겁니다.
즐푸하세여..
타락천사..