본문 바로가기

쓰기

음 일단 쓰레드를 사용하는 파일은
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/c3e/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
229 Talk 역시 번역 플러그인 테스트용으론 Hide_D 11417   2008-07-21 2008-07-21 12:50
체험판이 최고군요 +_+ 사쿠라슈트랏세웹 체험판 설치해놓고 전에 관리자님이 올리신 코드로 잘 돌아가니 이걸로 테스트 해야겠군요  
228 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) 이면 둘중 하나 있거나, 둘다 있거나 하면 그렇게 지정되는걸로 - 류제로님의...  
227 Talk [질문] CustomDic필터와 FixLine의 셋팅순서 [4] 호기심맨 11404   2009-01-03 2009-01-04 14:58
멀티플러그인 필터를 만들려고 하면서 제일 의문이 드는 부분인데요 그 필터들의 실행순서가 어떻게 결정되는지가 무척 궁금하네요 그러니까 예를 들어 A,B,C 3개의 필터를 순서대로 셋팅했다고 가정하면 제가 파악하기로는 알고리즘 코드 ↓ AFilter.OnPreTran...  
226 Talk 조만간 멀티플러그인은 기본 기능으로 흡수시킬까 합니다. 아랄 11346   2008-09-21 2009-01-06 01:25
그리고 ExtTextOut문제를 빨리 해결.. 기리기리 최신 패턴에 대한 업데이트 SVN 저장소 정리하기 등등.. 할게 많군여 ;;  
225 Talk CustomDic의 치환문자열에 대해 ( Hide님께) [2] 호기심맨 11323   2009-01-03 2009-01-05 00:04
안녕하세요 Hide님..저도 전부터 CustomDic유사한걸 만드드라 알아내고 여러번 Test해봐서 얻어낸 결론인데요.. 지금 Hide님이 정의하신 치환문자열"@*_D..../"보다는 역시 실제 쓰일리없는 엉망진창인 알파벳문자열이 훨씬 더 변역결과가 좋더군요. (주로 한...  
224 Archive 후킹방식 바꾼 ATCTNR.DLL [5] file 아랄 11319   2008-12-31 2009-01-06 00:46
 
223 Archive [소스, 파일] 기리기리, 페이트 전용 매크로(완료) [4] file Hide_D 11256   2008-10-07 2008-10-09 00:08
 
222 Talk 사용자대본 지나가다정착한이A님 특별판[...] file Hide_D 11242   2008-10-02 2009-01-06 01:24
 
221 Talk Re: SOW 모드의 신기한 점? file whoami 11209   2008-07-23 2009-01-06 01:27
 
220 Archive [플러그인] ATCode 테스트 버전 20081202 file whoami 11167   2008-12-03 2009-01-06 00:59
 
219 Talk SVN 말이죠 ㅠ_ㅠ [3] file Hide_D 11128   2008-09-29 2009-01-06 01:24
 
218 Talk 아 이런 클라나드 [1] file my Vagina 11070   2008-07-13 2009-01-06 01:00
 
217 Archive [플러그인,소스] DumpText2 테스트버전 081231 [1] file Hide_D 11059   2008-12-31 2008-12-31 21:59
 
216 Talk 디나이코필터 [2] my vagina 10993   2008-12-31 2009-01-15 00:10
코필터는 대단히 훌륭한 필터죠 근데 전부 한자로 되있으믄 간간히 해석 안되는 부분이 생기기도 하는데 어쩔수 없는 부분이 보이거든요. 이런걸 수동으로 억제 해보자는 생각이에요. 아마 코필터 내부에 들어가야 할텐데, 코필터에 디나이필터를 넣어서 일본...  
215 Archive [플러그인, 소스] KoFilter 테스트 버전 20080726 [5] file whoami 10977   2008-07-26 2009-01-06 01:26
 
214 Archive [플러그인] DivideLine 테스트 버전 20080927 [1] file Hide_D 10926   2008-09-27 2009-01-06 01:24
 
213 Archive [플러그인, 소스] DenyWord 테스트 버전 20081203 file Hide_D 10898   2008-12-03 2008-12-03 10:41
 
212 Talk 라파에님 다시 한번 테스트해보세요. [3] file Hide_D 10896   2008-08-17 2008-08-17 17:23
 
211 Archive [플러그인] DenyWord 테스트 버전 20080924 [1] file Hide_D 10891   2008-09-24 2009-01-06 01:24
 
210 Talk 옵션 스트링 버퍼 말이죠? [1] Hide_D 10830   2008-08-11 2008-08-11 23:22
ezTransXP단부터 확인을 해봤더니 ezTransXP도 LPSTR을 이용하는 군요 ㄱ- 옵션으로 파일명을 받으려고 했는데, 이거 참 난감하게 됬네요. c:ゲ?ムABCA_Route.txt 하면 못열테니까요. 아직 LPTSTR은 안줘봐서 모르겠지만 안된다면 충격이 좀 클듯;