C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[67294] Re:Re:[질문]호출인자에 문제가 있나요?
unitas [kjlee1] 1534 읽음    2012-05-23 13:00
답변 감사합니다.

저는 C++ Builder 6.0을 사용하는데요.  UDP 통신을 하고 쓰레드를 이용하려고 합니다.
아래는 파일의 한 부분입니다.

헤더 파일에
        HANDLE  hThread[MAX_CLIENT];     
        SOCKET  clSock;
        struct  sockaddr_in serv_addr[MAX_CLIENT];
        struct  sockaddr_in from_addr[MAX_CLIENT];

클래스 밖에 아래 함수 선언하구요.
   DWORD WINAPI WorkerThread(int nsock);

cpp 파일 내용입니다.
#include "Def.h"                    // 이 파일에  #include <process.h> 있습니다.
#include "untMain.h"
#include "SockUtil.h"
#include "untDebug.h"

HANDLE  hMutex;

void cSockUtil::open_sock()
{
    int i;
   WSADATA wsaData;

   if( WSAStartup(MAKEWORD(2, 0), &wsaData) != 0)
        frmDebug->Debug_Display("초기화 Error!");

    clSock  = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
    if(clSock == INVALID_SOCKET)
        frmDebug->Debug_Display("UDP 소켓 생성 Error!");

    hMutex  = CreateMutex(NULL, FALSE, NULL);

    // 접속한 Server 주소 & Port
    for( i = 0; i < MAX_CLIENT; i++ )
    {
        serv_addr[i].sin_family      = AF_INET;
        serv_addr[i].sin_addr.s_addr = inet_addr( frmMain->str_IP[i].c_str() );
        serv_addr[i].sin_port        = htons( frmMain->n_Port[i] );
    }

    for(i = 0; i < MAX_CLIENT; i++)    // 쓰레드 기지국 갯수에 따라 조정
    {
        // 아래 부분에서 에러 발생합니다.
        hThread[i]  = (HANDLE)_beginthreadex(NULL, 0, (unsigned int(__stdcall*)(void*))WorkerThread,
                              (void*)(int)i, 0, NULL);

        if( WaitForSingleObject(hThread[i], 10) == WAIT_FAILED)
        {
            str_error   = "쓰레드 Wait 오류 [ " + frmMain->str_IP[i] + " ]";
            frmDebug->Debug_Display(str_error);
        }
    }
}

DWORD WINAPI WorkerThread(int nsock)
{
      Sleep(1);
      WaitForSingleObject(hMutex, INFINITE);
      // 송, 수신 함수 호출등 작업
      ReleaseMutex(hMutex);
}

F1을 클릭해서 예제에 있는 소스를 사용해봤는데 그래도 같은 에러가 발생합니다.
hThreads[i]  = (HANDLE)_beginthreadex(&sa, 4096, threadMain, (void*)i, CREATE_SUSPENDED, threadId);
물론 threadMain 함수 선언하고 hThreads, sa, threadId 도 예제와 똑같이 해서 컴파일 했습니다.

그리고 참고로 전체 Build로 컴파일 하지않고  Compile Unit로 했습니다.
[ 소스 전체 완료되지 않아서 Build로 하면 다른곳에 에러가 나서 Compile Unit로 했습니다.]

인자형이 잘못된 곳이 있는지요?


김태선 님이 쓰신 글 :
: _beginthreadex는 호출인자가 많으니
: 정확하게 형을 맞게 지정했는지 살펴보세요.
: 형이 하나라도 틀리면
: 그런 에러를 냅니다.
:
: unitas 님이 쓰신 글 :
: : 컴파일을 하면
: : E2268 Call to undefined function '_beginthreadex' 에러가 납니다.
: :
: : 인크루드 아래를 추가해도 계속해서 _beginthreadex 부분에 에러가 나는데 원인을 모르겠습니다.
: : #include <process.h>
: :
: : 답변 부탁드립니다.

+ -

관련 글 리스트
67289 [질문]_beginthreadex unitas 1050 2012/05/23
67292     Re:[질문]_beginthreadex 김태선 2021 2012/05/23
67294         Re:Re:[질문]호출인자에 문제가 있나요? unitas 1534 2012/05/23
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.