|
파라미터를 갖는 Method를 동기화하는 방법에 대해 고심하던 중
TIdThread내 재정의된 Synchronize(TMethod& Method) 메소드를 사용하여
파라미터를 갖는 일반 메소드(TNotifyEvent Type을 사용하여 StringList를 넘기는 방법을 구상중) 를
동기화하기 위하여 아래와 같은 코드를 작성하여 테스트 도중 문제가 발생합니다.
class TIdThreadTest {
TIdTCPClient *Socket;
void __fastcall DoSync(TIdPeerThread* AThread);
public :
__fastcall TIdThreadTest();
TNotifyEvent OnSyncFunc;
};
void __fastcall TIdThreadTest::DoSync(TIdPeerThread* AThread)
TMethod AMethod;
TStringList *ParamList = new TStringList;
//ParamList 할당
...
if(OnSyncFunc) {
AMethod->Code = &OnSyncFunc;
AMethod->Data = ParamList;
AThread->Synchronize(AMethod); //이 부분에서 Access Violation 에러가 발생합니다...
}
delete ParamList;
}
....
class TestForm : TForm {
TIdThreadTest* AIdThreadTest;
};
__fastcall TestForm::TestForm(TComponent *Owner)
: TForm(Owner)
{
AIdThreadTest = new TIdThreadTest();
AIdThreadTest->OnSyncFunc = SyncFunc;
}
void __fastcall TestForm::SyncFunc(TObject *ParamList)
{
//Main Thread내 VCL Handling 작업
...
}
이러한 경우 어떻게 해결해야 할지 고수님들의 한 수 가르침 부탁드립니다....
참고로 Indy버전은 9.00.14 버전입니다.
|