근본적인 OS 스레드 CreateThread 하나만 파라미터를 전달할 수
uintptr_t _beginthreadex(
void *security,
unsigned stack_size,
unsigned (*start_address)(void *),
void *arglist,
unsigned initflag,
unsigned *thrdaddr
);
이러한 제한 사항이 주어지면 일반적인 규약에서는 모든 인수가있는 구조/클래스에 대한 포인터를 전달합니다. =
class Foo
{
int _someState;
int _otherState;
char _moreState[256];
unsigned DoWork();
static unsigned ThreadHandler(void*);
public:
void StartThread();
}
void Foo::StartThread()
{
_beginthreadex(..., Foo::ThreadHandler, this, ...);
}
unsigned Foo::ThreadHandler(void* arglist)
{
Foo* pFoo = (Foo*) arglist;
return pFoo->DoWork();
}
unsigned Foo::DoWork()
{
// do here all the thread work
}
이것은 매우 일반적인 관용구가 효과에 당신이 (많은 상태를 전달할 수 있습니다 : 보통, C++로, 하나의 스레드 핸들러됩니다 정적 함수를 만든 인수로 인스턴스를 전달합니다 인수)를 필요에 따라 스레드에 할당합니다.
그렇다면 정규 함수처럼 몇 개의 배열을 새 스레드로 완전히 넘길 수 없다는 뜻입니까? 내 힙 배열에 대한 포인터를 포함 할 구조체에 포인터를 전달해야합니까? 더 쉬운 직접적인 방법이 있습니까? – Faken
그것은 당신이해야 할 일과 거의 같습니다. 어쨌든 나사산 가공의 다른 악몽과 비교할 때 그다지 나쁘지 않습니다. ;) – Macke
내가 생각할 수있는 더 쉬운 방법은 없다. (그러나 배열은 실제로 첫 번째 요소에 대한 포인터이므로 구조체를 복잡하게 만들지 않는다.) –