리스트 반복자에 대해서 질문입니다.
글쓴이: 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를 지우기 전까지는 유효한 반복자이고, 그의 참조역시 유효합니다.
답변 감사합니다.
도움 많이 얻어요^^ 감사합니다.
댓글 달기