ACE_Thread_Manager::instance()->spawn(this->Worker);
이렇게 호출을 하면 컴파일 시점에서 아래와 같은
에러가 납니다.
error C2664: 'ACE_Thread_Manager::spawn' : 매개 변수 1을(를)
'ACE_THR_FUNC_RETURN (void *)'에서 'ACE_THR_FUNC'(으)로 변환할
수 없습니다.
'&ClassName::Worker' 와 같은 식으로도 시도해봤지만 잘
안되네요
Task를 사용해서 active하면 되긴하는데, run 메소드
하나밖에 스레드로 띄울 수 없어서 가급적 Thread
Manager를 이용하려 하는데요. 아시는 분 계시면
조언부탁드립니다 (__*)
조언해주신 방법으로는 생성된 ACE_Task_Base에서
부모객체(뭐라고부르는지-_-;) 멤버변수로의 접근이
번거로울것같아서요.
일일이 인자로 넘겨주는 방법밖에 없을것같은데..
그래서 해결책을 찾았는데, 스레드함수를 static으로
선언하면 되더라고요.
static 멤버함수에서는 클래스 멤버에 접근이
불가능하기때문에
스레드를 생성할 때 인자로 this를 넘겨주면,
스레드에서는 넘겨받은 void포인터를 형변환하여 쓰면
되고,
저같은 경우는 어차피 싱글톤으로 된 객체라서
싱글톤 인스턴스를 얻으면 private까지 접근 할 수
있더군요 ㅎㅎ
task의 activate는 svc라는 멤버함수를 스레드로
띄우잖아요?
svc에서 멤버변수로의 접근이 자유로운걸로 봐서 svc가
static은 아니고,,,.
어차피 내부적으로는 task도 winapi인 CreateThread를
쓸텐데,
애시당초 클래스 멤버함수는 함수호출규약이 다르니,
CreateThread함수로도 잘 안되더라고요.
어떤 파일을 열어보면, svc와 activate의 비밀관계에
대해 알아낼 수 있을까요? -_-a