inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Windows 소켓 프로그래밍 입문에서 고성능 서버까지!

CreateThread()를 사용하여 클래스의 멤버함수를 실행할 수 는 없나요?

해결된 질문

632

박성용

작성한 질문수 1

0

수업을 듣고 따로 서버코드를 만들어 보려는 중 잘 안돼서 질문 드립니다.

class Server {
	private:
		SOCKET listenSocket;
		std::list<SOCKET> listClients;
		SOCKADDR_IN serverAddr;
	public:
		Server();
		Server(USHORT port, IN_ADDR addr);
		void Bind();
		void Listen();
		DWORD WINAPI ThreadAcceptLoop(LPVOID pParam);
		void AcceptClient();
		void ReleaseServer();
		~Server();
};

main 함수에서 Server클래스의 객체를 만들어서 서버를 실행하는 로직을 구현하고 있습니다.

Server클래스의 AccpetClient()에서 CraeteThread()를 사용하여 ThreadAcceptLoop()를 실행하는 쓰레드를 만들어서 클라이언트의 요청을 Accept()하려고 합니다.

하지만 CreateThread()함수에서 E0167 DWORD (__stdcall Server::*)(LPVOID pParam) 형식의 인수가 LPTHREAD_START_ROUTINE 형식의 매개 변수와 호환되지 않습니다. 라는 오류와 함께 컴파일이 되지 않습니다.

찾아본 결과 함수를 static으로 선언하던지 전역함수를 사용하라고 합니다.

제가 하려던것처럼 클래스의 멤버함수를 실행할 수는 없나요??

socket.io udp iocp tcpip

답변 2

1

널널한 개발자

윈도우 환경에서 클래스 멤버의 함수 호출 규칙은 __stdcall이 아니라 thiscall입니다. 따라서 CreateThread() 함수가 요구하는 규칙에 맞지가 않습니다. 이 문제를 해결하는 방법은...

  1. 클래스의 정적 멤버로 선언하거나

  2. 별도 전역 함수로 선언 하는 것


    입니다.

결과는 이미 알아본 내용 그대로 입니다. 다른 방법은 없습니다. 참고하시기 바랍니다. :)

1

Ja Hwang

accept()를 스레드 만들어서 돌리시려는 이유가 있을까요?

https://stackoverflow.com/questions/10673585/start-thread-with-member-function

C++ thread 클래스 사용하면 멤버 함수를 멀티스레딩으로 돌릴 수 있는 것 같긴 하지만 괜찮은 사용인지는 의문입니다.

강의 내용 처럼 메인 스레드에서는 클라이언트 연결을 받고 그 클라이언트에 대한 처리를 멀티스레드로 돌리는 구조가 더 괜찮아 보입니다.

recv, send 리턴값 질문

0

76

2

스타,워크와 같은 디스창 (Disconnected)도 비정상 종료에 대응하는 시스템으로 봐야할까요?

0

96

2

수업과 관련해서 읽어볼 만한 책 있나요?

0

111

1

서버가 끊어버리는것에 대한 질문

0

121

2

TCP 의도적 장애 테스트 질문

0

159

2

shutdown()을 호출하는 이유

0

164

1

프로토콜이 적용된 파일 송신 서버에서 send, recv 질문 있습니다!

0

152

2

"파일 송신 서버 제작" 강의 질문입니다!

0

151

2

대표적인 장애 유현 2

0

131

2

대표적인 TCP 장애 유현

0

160

2

이벤트 기반 파일 입출력과 callback 기반 파일 입출력이 네트워크에도 쓰이는 기법인가요?

0

120

2

개발환경 질문이 있습니다.

0

137

1

TCP/IP vs UDP , 멀티 스레드에서의 병목 현상에 대한 질문이 있습니다!

0

221

2

메모리 관련 문제로 질문드립니다.

0

187

2

테스트 환경 질문드립니다!

0

168

2

ThreadAcceptLoop 의 우아한(?) 종료에 대해 질문드립니다.

0

419

2

하트비트 시 서버에서의 연결 종료

0

451

2

강사님 질문 드립니다.

0

249

1

소켓 입/출력 설계 정리

0

450

1

멀티스레드 기반 서버 관련 질문..!

0

412

2

빅 엔디언과 리틀 엔디언

0

377

2

TIME_WAIT 관련 문의드립니다.

0

226

1

강사님 강의자료 인쇄용으로 부탁드립니다.

0

288

1

bind 함수 관련 궁금증

0

357

2