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
[50292] Re:초보질문 C++Builder 때문에 죽겠습니다
장성호 [nasilso] 1580 읽음    2007-08-16 17:14
지난번 하신 질문의  답변을 잘 읽어보시면   답이 있습니다.
그리고 여기 검색해 봐도 나오구요

간단한 샘플 만들어서 올립니다. 참조하세요

//===================Unit2.h 파일 ==============================================
#ifndef Unit2H
#define Unit2H
//---------------------------------------------------------------------------
#include <Classes.hpp>
//---------------------------------------------------------------------------
class TMyThread : public TThread
{
private:
    TThreadMethod Proc;
protected:
    void __fastcall Execute();
public:
    __fastcall TMyThread(bool CreateSuspended);
    __fastcall TMyThread(bool CreateSuspended,TThreadMethod proc);
    void __fastcall TMyThread::SetProcess(TThreadMethod proc);

};
//---------------------------------------------------------------------------
#endif




//===================Unit2.cpp 파일 ==============================================
#include <vcl.h>
#pragma hdrstop

#include "Unit2.h"
#pragma package(smart_init)
//---------------------------------------------------------------------------

__fastcall TMyThread::TMyThread(bool CreateSuspended)
    : TThread(CreateSuspended)
{
    Proc=NULL;
}
//---------------------------------------------------------------------------
__fastcall TMyThread::TMyThread(bool CreateSuspended,TThreadMethod proc)
    : TThread(CreateSuspended)
{
    Proc=proc;
}
//---------------------------------------------------------------------------
void __fastcall TMyThread::SetProcess(TThreadMethod proc)
{
    Proc=proc;
}
//---------------------------------------------------------------------------
void __fastcall TMyThread::Execute()
{
    FreeOnTerminate = true;
    if(Proc) Synchronize(Proc);
}


//===================Unit1.cpp 파일 ==============================================

void __fastcall TForm1::FormThreadProc(void )
{
    ShowMessage("잘되나?");
}
//---------------------------------------------------------------------------
#include "Unit2.h"
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    TThreadMethod proc;
    proc= FormThreadProc;
    TMyThread *tred=new TMyThread(false,proc);
}
//---------------------------------------------------------------------------


그럼....  


신우철 님이 쓰신 글 :
: 하루를 꼬박 생각해도 답이 없네요 ㅜㅜ
: 질문할 사항은 제가 IOCP를 만들고자 합니다 winsock2.h를 사용해서 말이죠
: 그런데 문제는 쓰레드 생성입니다
: 일단 소스를 보시면 
:
: ------------------------------------------------------------------------
: IOCP.h
: ------------------------------------------------------------------------
: #include ListenThread.h
: class CIOCP
: {
: public:
:   sock m_client;
:   CListenThread *m_pListen;
:   void Init();
:   void LitenProc();
: }
: ------------------------------------------------------------------------
:
:
:
:
: ------------------------------------------------------------------------
: CIOCP.cpp
: ------------------------------------------------------------------------
: void CIOCP::Init()
: {
:   m_pListen = new CListenThread();
:   m_pListen->setproc(&CIOCP::LitenProc)
: }
: void LitenProc()
: {  
:    while(true)
:    {
:       if(FD_ACCEPT)
:       {
:         m_client = ACCEPT();
:          .
:          .
:          .
:       }
:    }
: }
: ------------------------------------------------------------------------
:
:
:
:
: ------------------------------------------------------------------------
: ListenThread.h
: ------------------------------------------------------------------------
: #include IOCP.h
: typedef void(CIOCP::*proc)(void);
: class CListenThread :public TThread
: {
: public:
:    proc m_proc;  
:    void setproc(proc pproc);
:
: }
: ------------------------------------------------------------------------
:
:
:
:
: ------------------------------------------------------------------------
: ListenThread.cpp
: ------------------------------------------------------------------------
: void CListenThread::setproc(proc pproc)
: {
:    m_proc = pproc;   
: }
:
: void __fastcall CListenThread::Excute()
: {
:   (CIOCP->*m_proc)();
: }
: ------------------------------------------------------------------------
:
: 이렇게 할려고 하는데 결국은 두개의 파일에서 참조를 해야하고 그렇게 되면 상호참조
: (typedef void(CIOCP::*proc)(void);)에러가 떨어집니다
: 도저히 답이 없네요 결국은 CreateThread 를 사용해야 하는것 같은데 거기에 들어가는
: Thread함수 또한 DWORD WINMAIN 함수네임() 이렇게 선언을 해야 하고 이함수가 CIOCP 클래스
: 내에서 선언을 하면 에러가 나더라고요 뭐 좋은 방법이 없을까요
: 고맙게도 많은 분들이 여기에 답변을 주셨는데 제가 원하는 답변이 아니라서 자세히 소스와 함께
: 다시 올립니다
: 다시 한번 말씀드리자면 제가 원하는건 쓰레드 클래스를 하나 만들고 그 쓰레드 클래스 내에서
: 즉 Excute() 내에서 작업을 하는게 아니고 메인클래스에서 쓰레드 작업을 하고 싶은겁니다
: 이렇게 하는 이유는 모든 작업들에 필요한 변수들은 CIOCP 클래스에 선언이 되어 있으니까요
: 그렇다고 CIOCP 에서 쓰레드를 상속받을수도 없죠 다중 쓰레드를 생성 할거니까요
: 제발 좋은 방법이 없을까요 깔끔하고 안정적인 그런 방법이요 부탁좀 드립니다
:
: 아 그리고 또 한가지 질문이 있는데 제가 프로젝트에 C++Builder 6.0에서 작업을 하는데
: 위에 파일 네임이 있잖아요 탭으로 거기에 CIOCP.cpp CIOCP.h 이렇게 두개의 텝이 있는데
: 원래대로라면 하나의 탭에서 Ctl + F6를 누르면 한텝에서 CIOCP.cpp CIOCP.h 이게 두개 번갈아 가면서 보여야
: 하는거 아닌가요 왜 저는 두개의 텝으로 나오나요??
: 이상 허접한 질문이었습니다 답변 꼭 부탁 드립니다

+ -

관련 글 리스트
50291 초보질문 C++Builder 때문에 죽겠습니다 신우철 1446 2007/08/16
50292     Re:초보질문 C++Builder 때문에 죽겠습니다 장성호 1580 2007/08/16
50295         Re:Re:초보질문 C++Builder 때문에 죽겠습니다 신우철 1351 2007/08/16
50301             Re:Re:Re:초보질문 C++Builder 때문에 죽겠습니다 장성호 1876 2007/08/16
50303                 장성호님 드디어 해결했네요 너무 감사합니다 ^^ 좋은 주말 보내세요 (냉무) 신우철 1850 2007/08/17
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.