2011-04-13 6 views
4
윈도우 C++에서

는 다음 스레드 생성 :윈도우 C++ 스레드 매개 변수

CreateThread(NULL, NULL, function, parameter, NULL, &threadID); 

이 새로운 스레드에서 "기능"을 실행하고 무효 * 또는 LPVOID로 "매개 변수"를 전달할 것이다.

"function"에 두 개의 매개 변수를 전달하려는 경우 두 변수가 포함 된 데이터 구조를 만들고 LPVOID로 데이터 구조를 캐스팅하는 것 외에 더 나은 방법이 있습니까?

답변

11

아니요, 유일한 방법입니다. 그냥 2 데이터 멤버와 구조체를 만들고 무효로 전달 *

+0

정말인가요? 그런 식으로하는 것은 너무 추한 것처럼 보입니다. – rossb83

+0

'void *'를 매개 변수로 사용하는 아이디어는이 작업을 수행 할 수 있으며 시스템은 방해가되지 않습니다. 코드는 양쪽 매개 변수가 무엇인지 알고 있지만 시스템은 그렇지 않습니다. – ssube

+0

@ross 그게 얼마나 추한가요? 당신은 C 인터페이스를 제공해야한다는 것을 기억하십시오. 문제에 대한 당신의 더 나은 해결책은 무엇입니까? –

0

이것은 스레드에 매개 변수를 전달하는 표준 방법이지만 새 스레드는 프로세스의 메모리에 액세스 할 수 없으므로 전달하기 어렵거나 적절한 동기화 제어를 제공하는 한 많은 양의 데이터를 공유 리소스로 액세스 할 수 있습니다.

0

나는 훨씬 더 좋은 방법이 있다고 생각하며, 항상 내 임베디드 코드에서 사용합니다. 사실 CreateThread()와 매우 유사한 함수에 멤버 메서드를 전달하려는 욕구가 커졌습니다. 그 이유는 클래스가 이미 스레드 코드에 필요한 모든 매개 변수를 구성원 데이터 (적절한 설정자)로 보유했기 때문입니다. 관심있는 경우 참조 할 수있는 I wrote up a more detailed explanation. OSTaskCreate()를 볼 수있는 글쓰기에서 CreateMethod()를 정신적으로 대체하십시오.

+0

2016 년 12 월 13 일 링크가 끊어진 것 같습니다. 제발 그걸 고칠 수 있을까요? @Tod – Andiana

+1

내가 쓴 것의 사본을 얻을 수 있는지 알게 될 것이다. 그 위키는 NetBurner에 속해 있으며 여전히 비즈니스를하고 있으며 강력합니다. 그래서 왜 그들이 wiki를 가져 왔는지 확신 할 수 없습니다. 나는 Pluralsight에 합류 한 이래로 임베디드 작업을 수행하지 않았다. 나는 그들의 포럼에서 직원이보기 전에 잠시 시간을 할애 할 수 있는지 물었습니다. – Tod

+0

@Andiana Netburner는 휴일 동안 위키를 친절하게 부활시켜 기사를 얻을 수있었습니다. 관심있는 페이지를 위키 페이지에 복사하고 해당 페이지에서 관심을 가져야 할 위치를 가리 키도록 링크를 업데이트했습니다. – Tod