|
임프랍니다.
TThread::Synchronize() 함수의 인자로 넘길 수 있는 함수는 파라미터가 없어야 합니다.
직접적으로 파라미터를 가지는 함수를 넘겨줄 방법은 없습니다.
이 경우에 전역변수나 쓰레드의 멤버변수, 아니면 호출한 쪽의 폼 멤버변수를 쓰는 수밖에 없지요.
Synchronize()함수내에서 이런 변수들을 억세스해도 동기화문제는 발생하지 않으므로 상관없습니다.
그럼 이만...
심호용 님이 쓰신 글 :
: 1.Thread의 Execute에서 Synchronize로 함수를 호출할 경우 파라메타가 없을 경우는 아래와 같이 하면
: 되는데,만약 CheckSaveStop함수가 아래와 같은 함수라면 어떻게 호출하죠?
:
: bool CheckSaveStop(int a,int b)
: {
: .....
: }
:
:
: //정대 체크 및 저장
: Synchronize(CheckSaveStop); -> 파라메타가 없을 경우 호출
:
: 2. 위의 방법이 안되면, ADO Vcl을 Thread내에서 사용시 Execute내에서 해당 함수를 호출하면 CoInitialize에러가 나던데.......해결 방법 없나요?
: 예를 들면 SaveCompHis를 Execute내에서 호출하려면 어떻게 해야되죠?
:
: void __fastcall TDatathread::Execute(void)
: {
: SaveCompHis(hodae); ->에러 남.(CoInitialize에러)
: }
:
: void __fastcall TDatathread::SaveCompHis(int Hodae)
: {
: TADOQuery *adoQ;
: String Status;
:
: adoQ = new TADOQuery(Application);
: adoQ->ConnectionString = GetConnectionString(FormatDateTime("yyyymm",Now()),"H");
:
: Status = "1";
: adoQ->Close();
: adoQ->SQL->Clear();
: adoQ->SQL->Add("INSERT INTO CompHis ");
: adoQ->SQL->Add("(Hodae,cTime,Status) VALUES ");
: adoQ->SQL->Add("(" + String(Hodae+1) + ",");
: adoQ->SQL->Add("'" + FormatDateTime("yyyy-mm-dd hh:nn:ss",Now()) + "',");
: adoQ->SQL->Add("'" + Status + "')");
: adoQ->ExecSQL();
:
: delete adoQ;
: }
:
:
|