Страница 1 из 1

fgets & progressbar

Добавлено: 07 авг 2005, 19:27
fallologia
Имеем оголённую функцию fgets с выводом обрабатываемых строчек в файл:

Код: Выделить всё

#include "stdafx.h"
#include "RusCon1.h"
#include <stdio.h>

 
DWORD CRusCon::Process()
{
    FILE* pFile, *pFile2;    
    char string [51200];    
    pFile = fopen("Rus.Syn","rb");
    pFile2 = fopen("RusSyn.txt","w+");
   
while(!feof(pFile))    
{    
     fgets(string, 51200, pFile);        
     fputs(string,pFile2);   
}    
fclose(pFile);
fclose(pFile2);               
return 0;
}
Как, используя эту функцию fgets, можно прицепиться к обрабатываемому потоку при помощи progressbar? В частности, как постоянно узнавать, сколько байт уже записано функцией fputs в конечный файл?.. :?:

Добавлено: 08 авг 2005, 08:03
ssDev
Для того чтобы изменять позицию в ProgresBar я использую
CProgressCtrl::SetPos(Offset-1)
Но проблема в том что этот метод посылает сообщение к WinCtrl которое уходит в очередь сообщений а поскольку ты своими
fgets(string, 51200, pFile); fputs(string,pFile2); блокируеш поток то эти сообщения не обрабатываются.
Чтобы не парится с потоками я все это делаю в диалоге с ProgresBar

BOOL CDlgProgLoad::OnInitDialog()
{
CDialog::OnInitDialog();
CString tit;
tit.Format("Load Image: Size=%d",m_sz);
SetWindowText(tit);

m_prg.SetRange32(0,m_sz);
m_prg.SetPos(0);
m_tm=SetTimer(100,10,NULL);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}

void CDlgProgLoad::OnProc()
{
m_pos+=m_cur->Val;
m_prg.SetPos((int)(m_cur->Offset)-1);
return;
OnOK();
}

void CDlgProgLoad::OnTimer(UINT nIDEvent)
{
OnProc();
}

void CDlgProgLoad::OnOK()
{
KillTimer(m_tm);
CDialog::OnOK();
}

Иначе надо создавать отдельный поток для записи или для ProgressBar
Или использовать асинхронные Запись/Чтение WriteFile/ReadFile