리스트 반복자에 대해서 질문입니다.
글쓴이: balgarac1 / 작성시간: 수, 2014/11/05 - 11:42오후
void ThreadServer::socketStart()
{
User userList;
list<User>::iterator iter;
cout << "socket start.. " << endl;
if (listen(servSock, 128) == SOCKET_ERROR)
{
ErrorHandling("listen()");
} //
while (true)
{
clntAddrSize = sizeof(clntAddr);
WaitForSingleObject(hMutex, INFINITE); // mutex
userList.userSock = accept(servSock, (SOCKADDR *)&clntAddr, &clntAddrSize);
if (userList.userSock == SOCKET_ERROR)
{
ErrorHandling("accept()");
}
userList.mode = TRUE; // mode trasition
userList.userID[0] = '\0';
userList.clntAddr = clntAddr;
uList.push_back(userList);
for (iter = uList.begin(); iter != uList.end(); iter++)
{
if (iter->userSock == userList.userSock)
{
listPtr = iter;
break;
}
else
continue;
}
hThread_handleClient = (HANDLE)_beginthreadex(NULL, 0, handleClient, iter, 0, NULL); // 이 부분에서 4번째 인자
ReleaseMutex(hMutex);
}
}쓰레드로 list 안에 있는 노드 하나의 주소 값을 인자로 넘기고 싶은데 가능한 방법이 없을까요??
Forums:


...
&*iter 라고 쓰시면 될 것 같습니다만...
그리고 다음 번엔 웬만하면 컴파일이 되는 버전을 올려주시지요...
C++ 표준에서는
http://stackoverflow.com/questions/6438086/iterator-invalidation-rules
&*iter 를 쓰시면 됩니다. iter element를 지우기 전까지는 유효한 반복자이고, 그의 참조역시 유효합니다.
답변 감사합니다.
도움 많이 얻어요^^ 감사합니다.
댓글 달기