error C2664: 'CreateThread' : cannot convert parameter 3 from 'void (int)' to 'unsigned long (__stdcall *)(void *)'
2046 단어 parameter
LPTHREAD_START_ROUTINE 함수 포인터
함수를 가리키며, 이 함수는 숙주에게 어떤 라인이 실행되기 시작했음을 알립니다.
.NET Framework 4 릴리즈에서는 이 함수 포인터가 사용되지 않습니다. typedef DWORD (__stdcall *LPTHREAD_START_ROUTINE) (
[in] LPVOID lpThreadParameter
);
매개 변수
lpThreadParameter
[in] 이미 실행된 코드를 가리키는 바늘.
비고
LPTHREAD_START_ROUTINE이 가리키는 함수는 리셋 함수이며, 응용 프로그램을 불러오는 컴파일러에 의해 이루어져야 한다.
PS:
콜백 함수가 일반 구성원 함수인 경우 오류가 발생합니다.
error C2440: 'type cast' : cannot convert from '' to 'unsigned long (__stdcall *)(void *)'
정적 구성원 함수로 성명해야 합니다.구성원 함수를 정적으로 설명하면 라인 함수로서의 문제를 해결할 수 있지만, 이것은 새로운 문제를 가져왔다. 그것은 바로 static 구성원 함수가static 구성원에게만 접근할 수 있다는 것이다.이 문제를 해결하는 방법 중 하나는 클래스 정적 구성원 함수 (스레드 함수) 를 호출할 때,this 바늘을 매개 변수로 전송하고, 스레드 함수에서 강제 형식 변환으로this를 이 클래스를 가리키는 바늘로 변환하여, 이 바늘을 통해 비정적 구성원에 접근하는 것이다.
루틴 함수는 클래스의 실례에 독립되어 존재하는데 그의 생명기는 클래스의 생명기가 아니라 전체 프로세스이다.비정상적인 구성원 함수를 라인 함수로 사용할 수 있다면, 이 종류의 실례가 정의되지 않았다면, 라인 함수를 호출할 수 없었을 것이다
typedef DWORD (__stdcall *LPTHREAD_START_ROUTINE) (
[in] LPVOID lpThreadParameter
);