본문 바로가기

쓰기

음 일단 쓰레드를 사용하는 파일은
CAutoLoad 클래스 하나뿐이구요.

CustomDic에 포함됩니다.




5초마다 한번씩 파일리스트에 등록된 파일의 수정된 날짜를 체크해서
새로 갱신된것이면 새로 읽는다...라는 기능을 가지고 있는데,



애초부터 쓰레드가 동작조차 하지 않습니다.
어떻게 해야할까요;

 #pragma once
#include "tstring.h"
#include <vector>
#include <map>

using namespace std;

struct DicWord
{
    int WordN;
    int WordLen;
};

class CAutoLoad
{
public:
    CAutoLoad(void);
public:
    ~CAutoLoad(void);

public:
    void AddDic(LPCWSTR CustomPath);

    map<int,int> GetKeyIndex();
    vector<map<UINT,DicWord>> GetKeyBook();
    vector<string> GetValueList();
    int GetWordN();
    int GetBookN();

    bool GetChanged();
    void SetChanged();

    void FileClear();


    //Load 쓰레드 처리
    bool m_bChanged;
    CWinThread * m_pLoadThread;
    void Callback();
    static UINT CallbackStub(LPVOID param);

private:
    void ResetDic();
    void ReadDic(LPCWSTR CustomPath);

    void SetKey(LPCSTR JpnWord,LPCSTR KorWord);

    //사전 데이터
    map<int, int> KeyIndex;
    vector<map<UINT,DicWord>> KeyBook;

    vector<string> ValueList;

    int WordN;
    int BookN;

    vector<wstring> FileList;
    vector<DWORD> FileWriteTime;
};

 #include "StdAfx.h"
#include "AutoLoad.h"
#include "SubFunc.h"
#include "hash.hpp"

volatile bool m_bRunning;
CCriticalSection g_cs;

CAutoLoad::CAutoLoad(void)
{
    m_bRunning=true;
    m_pLoadThread = AfxBeginThread(CAutoLoad::CallbackStub,this);
}

CAutoLoad::~CAutoLoad(void)
{
    g_cs.Lock();
    m_bRunning=false;
    g_cs.Unlock();
    if(NULL != m_pLoadThread)
    {
        ::WaitForSingleObject(m_pLoadThread->m_hThread,INFINITE);
        delete m_pLoadThread;
        m_pLoadThread = NULL;
    }
}

void CAutoLoad::FileClear()
{
    g_cs.Lock();
    FileList.clear();
    FileWriteTime.clear();
    g_cs.Unlock();
}

UINT CAutoLoad::CallbackStub(LPVOID param)
{
    while(1)
    {
        Sleep(5000);
        g_cs.Lock();
        if(!m_bRunning)
        {
            g_cs.Unlock();
            break;
        }
        else
        {
            g_cs.Unlock();
            static_cast<CAutoLoad*>(param)->Callback();  // 여기서 멤버 함수를 호출해주죠.
        }
    }
    return 0L;
}

void CAutoLoad::Callback()
{

    //파일체크 개시
    g_cs.Lock();
    int FileN=(int)FileList.size(); //Size값이 실시간으로 변하지 않도록
    g_cs.Unlock();

    bool bReload=false;
    HANDLE h_file=NULL;
    for(int i=0;i<FileN;i++)
    {
        h_file=CreateFile(FileList[i].c_str(), GENERIC_READ, FILE_SHARE_READ, NULL,
                                                                             OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

        if(h_file != INVALID_HANDLE_VALUE){
            FILETIME create_time, access_time, write_time;

            // 지정된 파일에서 파일의 생성, 최근 사용 그리고 최근 갱신된 시간을 얻는다.
            GetFileTime(h_file, &create_time, &access_time, &write_time);
            CloseHandle(h_file);

            g_cs.Lock();
            if(write_time.dwLowDateTime>FileWriteTime[i])
            {
                FileWriteTime[i]=write_time.dwLowDateTime;
                bReload=true;
            }
            g_cs.Unlock();
        }
    }
    

    if(bReload)
    {
        ResetDic();
        g_cs.Lock();
        for(int i=0;i<FileN;i++)
        {
            ReadDic(FileList[i].c_str());
        }
        m_bChanged=true;
        g_cs.Unlock();
    }
}

void CAutoLoad::AddDic(LPCWSTR Path)
{
    g_cs.Lock();
    FileList.push_back(Path);
    FileWriteTime.push_back(0);
    g_cs.Unlock();
}

void CAutoLoad::ReadDic(LPCWSTR Path){ /* 파일 읽기 작업*/ }
void CAutoLoad::ResetDic(){ /*초기화 작업*/}
void CAutoLoad::SetKey(LPCSTR JpnWord, LPCSTR KorWord){    /*단어 추가 작업*/ }

//이하는 모두 g_cs.Lock(); 데이터빼내고 g_cs.Unlock(); return 데이터
map<int,int> CAutoLoad::GetKeyIndex(){...}
vector<map<UINT,DicWord>> CAutoLoad::GetKeyBook(){...}
vector<string> CAutoLoad::GetValueList(){...}
int CAutoLoad::GetBookN(){...}
int CAutoLoad::GetWordN(){...}
bool CAutoLoad::GetChanged(){...}
void CAutoLoad::SetChanged(){...}


분류 :
Talk
조회 수 :
10808
등록일 :
2008.12.25
20:42:46
엮인글 :
https://arallab.hided.net/4117/dfb/trackback
게시글 주소 :
https://arallab.hided.net/board_devtalk/4117

whoami

2008.12.26
21:27:55
음. 눈에 바로 띄는 것은 특별히 없군요.. 실제로 돌려보지 않으면;;

어쨌든.. 확인하셔야 할 사항은..
1. CAutoLoad 가 제대로 생성되었는가?
2. 생성 후 쓰레드가 제대로 만들어졌는가? (m_pLoadThread 에 제대로 된 CWinThread 주소가 들어갔는가?)
3. 쓰레드가 혹시 한번 돌고 그대로 종료되지 않았는가?

인 것 같군요. 각각 디버그 메세지를 띄우거나 디버거를 넣어 확인해 보세요.

Hide_D

2008.12.26
22:53:45
확인 결과
m_pLoadThread = AfxBeginThread(CAutoLoad::CallbackStub,this);
에서 F10 누르는 순간 정지.

CallBackStub의
while(1)에 브포를 걸어두고 있었는데 여기로 넘어오질 않네요.
List of Articles
번호 제목 글쓴이 조회 수 추천 수 날짜 최근 수정일sort
공지 Talk [필독] 테스트필터 사용시 주의사항 라파에 155439   2008-08-03 2008-12-16 00:03
209 Talk VB용 커스텀스크립트 Hash 함수 [2] HaruKaze 9835   2009-01-05 2009-02-14 11:01
비주얼베이직에서 사용할 수 있는 커스텀스크립트 Hash 생성 함수입니다. 비주얼베이직에서는 이진 변환과 이진 연산을 할 수 없기 때문에 이진 변환과 연산을 할 수 있게 해주는 함수를 작성하여 만들었습니다. - 정수를 이진 문자열로 변환하는 함수 - 이진...  
208 Talk [질문] 번역플러그인에 관해... [2] 호기심맨 12729   2009-01-06 2009-01-06 09:12
Aral을 하다보면 한번 번역된 문장은 다시 번역하지 않고 예전에 번역된 결과값을 다시 쓰잖아요.... 궁금한건 이부분을 Aral본체가 하는것인지.... 아니면... 번역플러그인이 해주는 것인지이거든요.. 그러니까 번역플러그인을 만들려면.... 저 처리를 번역플...  
207 OtherFiles CustomDic 090106 쓰레드 에러 도와주세요~ [2] file Hide_D 14035   2009-01-06 2009-01-06 20:47
 
206 Archive 번역용 작업툴 v0.2.2 [2] file HaruKaze 11464   2009-01-06 2009-01-06 23:48
 
205 Archive SimpleDLL [2] file Hide_D 12021   2009-01-07 2009-01-07 15:55
 
204 Archive (수정) 하루카제님 요청하신 VB용번역dll입니다. [2] file 호기심맨 10250   2009-01-07 2009-01-08 00:54
 
203 Archive CustomDic 0.3 20080107 또 오류 OTL [5] file Hide_D 13954   2009-01-07 2009-01-08 02:00
 
202 Talk ezTransXP의 다이얼로그 파일의 h,cpp가 누락되어있습니다. [1] Hide_D 12415   2009-01-10 2009-01-12 21:37
커밋하시면서 빼놓으신것 같네요;; ezTransXP 쪽도 수정할게 좀 있어서 저부분 마저 올려주세요~  
201 Archive [플러그인,소스] Korean Duplication Checker 20090115 [2] file Hide_D 13334   2009-01-14 2009-01-19 23:34
 
200 Talk 코드정리 목록 + 코드 secret sizukana 6   2009-01-17 2009-01-17 11:41
비밀글입니다.  
199 Archive [번역툴]QuickTrans Beta 0.0.6 [6] file HaruKaze 21992   2009-01-28 2011-04-27 12:51
 
198 Archive TextFile Open/Save Library [5] file Hide_D 11830   2009-02-01 2009-02-09 00:37
 
197 Archive [번역툴]QuickTrans 0.0.10 RC4 [10] file HaruKaze 11899   2009-02-09 2009-03-07 20:49
 
196 Talk 버그 확인 목록 [4] Hide_D 12347   2009-03-06 2009-03-16 03:09
(확인) CustomDic - 옵션창에서 쓰레드를 중지하지 않았다. CustomScript - 파일이 없는 상태에서 바로가기에 Write 모드가 추가되었을때 에러 KiriKiri - 선택지 출현지 문자열 번역 오류 해결 (확인 필요) FixLine 문자가 아무도 없을때 튕김 -_-? 2Byte 잘 ...  
195 Archive [번역툴]QuickTrans 0.1.0 릴리즈 [1] file HaruKaze 17466   2009-03-08 2011-06-28 01:25
 
194 Talk FixLine 기능 추가 [1] Hide_D 11416   2009-03-13 2009-03-13 21:23
rn r 이런식으로 나올때 r이 우선 적용되는 문제를 해결할것 -가능한 방법- 1. Greedy, UnGreedy의 부분적 적용 2. 우선순위 선택 3. 정규식과 맞짱뜨기 4. 어정쩡한 조건문 (r)(n) 이면 둘중 하나 있거나, 둘다 있거나 하면 그렇게 지정되는걸로 - 류제로님의...  
193 Talk 번역 플러그인 난해한 문제???? [3] 호기 14864   2009-03-15 2009-10-20 18:06
지금 ML_Trans라는 번역 플러그인을 만들고 있는데 좀 이해가 안가는 문제가 생기네요.. 아랄에 적용시킨후 다른 번역 플러그인으로 바꿀때는 아무 문제가 안생깁니다 그러니까 번역 플러그인을 EzTransXp<->ML_Trans로 마구 여러번 바꾸어도 문제는 안일어 납...  
192 Talk 히데님이 부탁하신거.... [1] file 류제로 19458   2009-03-21 2011-06-28 01:25
 
191 Talk FixLine '인수 추가' 창 새 디자인 [4] file Hide_D 18340   2009-03-26 2009-03-27 02:07
 
190 Archive FixLine v2 20090329 테스트버전 [6] file Hide_D 14317   2009-03-29 2009-03-29 15:51