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

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[483] 부스트 쓰레드를 사용해 봅시다 ^^
nicekr [mpbox] 7765 읽음    2005-08-10 01:01
기본적인 테스트 코드입니다.

콘솔 어플 만드시고 테스트 하시면 됩니다.

오늘 모임이후 술마시고 간단히 만들어 보았습니당...

그럼 즐빌하세요 !


#include <vcl.h>

#include <stdio.h>


#pragma hdrstop


#define BOOST_THREAD_USE_LIB

#include <boost/thread/thread.hpp>

using boost::thread;


//---------------------------------------------------------------------------

#pragma argsused

void myworker()
{
    while(1)
    {
        static int i = 0;

        i++;

        printf("%d\n", i);

        if( i == 10 )
            break;

        Sleep(500);
    }
}

int main(int argc, char* argv[])
{
    std::auto_ptr<boost::thread> mythread;

    mythread = std::auto_ptr<thread>( new boost::thread(&myworker) );

    printf("hey?\n");

    mythread->join();

    printf("end\n");

    mythread.release();

    system("pause");

    return 0;
}

//---------------------------------------------------------------------------
WARSHIP [warship]   2005-08-10 11:33 X
nicekr 님의 글을 읽고 boost라이브러리를 설치하였습니다.
그리고 나서 테스트 해보려고 위의 소스대로 작성하여 보았는데요
우선
#define BOOST_THREAD_USE_LIB 을 해주면
"LIBBOOST_THREAD-BCB-MT-D-1_32.LIB"를 열수 없다고 나오는군요.
boost/lib 를 봐도
MT-S, MT-S-1_32 , MT-SD, MT-SD-1_32 이렇게 4가지만 있구요.
그래서 위 라인을 지우고 컴파일하면
컴파일은 되지만 실행하면 바로 Access Violation` 에러가 뜨네요 ㅠ.ㅠ;
new boost::thread(&myworker) 여기서 나는거 같은데.
왜그런지 알수가 없네요 ^^;
처음 프로젝트 오픈할때 콘솔->멀티스레드,C++ 체크하고 만든 프로젝트구요.
혹시 원인을 아시면 좀 조언좀 부탁드립니다. ^^;
nicekr [mpbox]   2005-08-10 12:56 X
ctrl + shift + F11 키를 눌러서 Directories/Conditionals 에서
include 와 lib 폴더가 추가되었는지 확인하셔야 할 것 같습니다.
회사에는 boost 라이브러리를 설치하지 않아 테스트를 해볼 수 없고
저녁에 집에 가면 확인해 보도록 하겠습니다 ^^
WARSHIP [warship]   2005-08-10 13:51 X
이유를 연구해보다가 -_- 황당한걸 발견했습니다.

#define BOOST_THREAD_USE_LIB 를 해주면

LIBBOOST_THREAD-BCB-MT-D-1_32.LIB <- 이 화일을 찾는데요

결론적으로 위와 같은 화일은 없구요 대신에
BOOST_THREAD-BCB-MT-D-1_32.LIB 라는 화일이 있군요.

그래서 #define BOOST_THREAD_USE_LIB <- 이라인을 지우고
위 LIB 화일을 프로젝트에 따로 추가해주고
.dll 화일을 카피해주니 작동을 하네요.

아무래도 화일이름이 잘못 지정되어 있거나 머 그런문제같은데.
어디를 손대야 할지 모르겠네요 ^^;

그럼 좋은 하루 보내세요 ^^;
nicekr [mpbox]   2005-08-10 16:45 X
음 ^^''' 지금 막 회사에서 부스트 라이브러리를 설치하고 include & lib 폴더를 기본 설정하고 콘솔 어플리케이션 프로젝트를 시작해서 위의 코드 그대로 실행했는데
아주 잘됩니다^^''''''
흠......
어찌된 일일까요?
참고로 빌더 6 입니다. -_- 별루 관계는 없을 것 같습니다만....
WARSHIP [warship]   2005-08-11 10:41 X
휴  링크된 hpp 화일을 따라가다 보니 결국은 해결했습니다.
결론은 프로젝트에 옵션에 Use Dynamic RTL 이 체크되어 있었는데.
똑똑하게도 부스트의 auto_link.hpp라는 화일에서 이걸 검출해서
lib 화일명을 바꾸어 버리더군요 -_-;
이 상태에서 위와 같은 소스를 사용하게 되면, BCB는 다이나믹 링크를 하려고 하고
소스는 정적링크를 하려고 하다보니 엉뚱한 lib 화일을 찾게 되네요. ㅠ.ㅠ
그래서 알아낸게(매우 허접하게도) lib 디렉토리 내에서
boost_~~~ 로시작하는 것들은 다이나믹 링크용 화일들이구요.
libboost_~~~ 로 시작하는 것들은 정적으로 합칠때 쓰이는 lib화일들이라는것을
알았습니다. ㅠ.ㅠ ( OTL );

결론은 프로젝트 옵션에서 Use Dynamic RTL의 체크를 해제하면 잘된다.. 입니다.
답변 감사드리구요 boost에 관심을 갖게 해 주셔서 고맙습니다. ^^;
nicekr.황경록 [mpbox]   2005-08-11 15:00 X
^^ 그렇군요. 감사합니다 ... 그래도 ...

OTL ^^''''''
nicekr.황경록 [mpbox]   2005-08-11 15:02 X
아참... 빌더 IDE 를 Open 하신다음 Close All 하신다음 Ctrl + Shift + F11 을 사용해서
프로젝트 옵션을 열어 boost 및 옵션을 설정하고 확인하면 이것이 바로
디폴트 설정으로 저장됩니다.

혹 프로젝트 새로 만들고 부스트 관련 inc 및 lib 폴더를 추가하시는 분이 있지 않을까 하는 우려에 ^^'' 그럼 즐빌하세요.

+ -

관련 글 리스트
483 부스트 쓰레드를 사용해 봅시다 ^^ nicekr 7765 2005/08/10
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.