error C2664: 'CreateThread' : cannot convert parameter 3 from 'void (int)' to 'unsigned long (__stdcall *)(void *)'

2046 단어 parameter
오류: error C2664:'CreatThread': can not convert parameter3 from'void(int)'to'unsigned long(stdcall *) (void *)'can not convert parameter3 from'void(int)'to'unsigned long( stdcall **) (void *) '코드는 다음과 같다.: void CMnonot CMultiThreat Threatatterteratatatatatatatater 3 parameter3 2Dlg::::::::::::::::::::::::::::::::::::::::O START) -> Enable Window(FALSE), WaitForSingle Object(hThread, INFINITE), GetDlgItem(IDC START)->EnableWindow(TRUE);}void ThreadFunc(int integer){int i;for(i=0;i방법을 수정하고 ThreadFunc를 (LPTHREAD START ROUTINE) ThreadFunc로 변경하면 됩니다.

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를 이 클래스를 가리키는 바늘로 변환하여, 이 바늘을 통해 비정적 구성원에 접근하는 것이다.
루틴 함수는 클래스의 실례에 독립되어 존재하는데 그의 생명기는 클래스의 생명기가 아니라 전체 프로세스이다.비정상적인 구성원 함수를 라인 함수로 사용할 수 있다면, 이 종류의 실례가 정의되지 않았다면, 라인 함수를 호출할 수 없었을 것이다

좋은 웹페이지 즐겨찾기