Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Потоки, Билдер, формы и их взаимодействие, Access violation at address.... 
V
    Опции темы
Bunny
Дата 16.8.2006, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 22.3.2006

Репутация: 1
Всего: 1



Первый раз пытаюсь работать с потоками, поэтому трудно smile
Проблема такая:
создаю поток, функция потока вызывает функцию формы, которая рекурсивно ищет нужные файлы и добавляет их в ListView. Ищет она их нормально, но как только пытается обратиться к списку - вылетает выше написанная ошибка. Понимаю, что ошибка прав доступа, но как исправить  smile 
Если делать без потока - работает, но поиск в больших папках занимает много времени и во время поиска форма остается недоступной, и кажется что приложение повисло. Не хочется так оставлять, поэтому need help!
PM MAIL ICQ   Вверх
_hunter
Дата 16.8.2006, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 24
Всего: 98



код показывай


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Fazil6
Дата 16.8.2006, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 11
Всего: 60



Цитата

как только пытается обратиться к списку - вылетает выше написанная ошибка

синхронизация
PM MAIL   Вверх
Bunny
Дата 16.8.2006, 20:40 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 22.3.2006

Репутация: 1
Всего: 1



Выкладываю код (его нужную часть)
Код

#ifndef ResultsImportUnitH
#define ResultsImportUnitH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ComCtrls.hpp>
#include <Buttons.hpp>
#include <windows.h>
//---------------------------------------------------------------------------
class TResultsImportForm : public TForm
{
__published:    // IDE-managed Components
    TLabel *FileResultsLabel;
    TListView *ResultFilesList;
    TLabel *DirectoryLabel;
    TButton *OKImportBt;
    TButton *CancelImportBt;
    TLabel *ProgressLabel;
    TProgressBar *ProgressBar;
    TBitBtn *CheckAllBt;
    TBitBtn *UncheckedAllBt;
    void __fastcall ResultFilesListChange(TObject *Sender, TListItem *Item,
          TItemChange Change);
    void __fastcall OKImportBtClick(TObject *Sender);
    void __fastcall FormActivate(TObject *Sender);
    void __fastcall CheckAllBtClick(TObject *Sender);
    void __fastcall UncheckedAllBtClick(TObject *Sender);
    void __fastcall CancelImportBtClick(TObject *Sender);
private:    // User declarations
    DWORD FileType(LPWIN32_FIND_DATA pFileData);
    AnsiString GetFileExtention(AnsiString FileName);
public:        // User declarations
    AnsiString m_strPath;
    int CountChecked;
    __fastcall TResultsImportForm(TComponent* Owner);
    void LoadFilesInList(LPCTSTR PathName);
};
//---------------------------------------------------------------------------
extern PACKAGE TResultsImportForm *ResultsImportForm;
//---------------------------------------------------------------------------

#endif



Код

DWORD TResultsImportForm::FileType(LPWIN32_FIND_DATA pFileData)
{
    bool IsDir;
    DWORD FType;
    FType = TYPE_FILE;
    IsDir = (pFileData->dwFileAttributes &
            FILE_ATTRIBUTE_DIRECTORY) != 0;

    if (IsDir)
    {
        if (AnsiString(pFileData->cFileName) == "." ||
            AnsiString(pFileData->cFileName) == "..")
            FType = TYPE_DOT;
        else
            FType = TYPE_DIR;
    }
    return FType;
}
//---------------------------------------------------------------------------

AnsiString TResultsImportForm::GetFileExtention(AnsiString FileName)
{
    int pos = FileName.LastDelimiter(".");
    return FileName.Delete(1, pos);
}
//---------------------------------------------------------------------------

void TResultsImportForm::LoadFilesInList(LPCTSTR PathName)
{
    HANDLE SearchHandle;
    WIN32_FIND_DATA FindData;
    DWORD FType;
    TCHAR CurrPath[256];

    int pos = GetCurrentDirectory(255, CurrPath);
    CurrPath[pos+1] = NULL;

    SearchHandle = FindFirstFile(PathName, &FindData);
    do
    {
        FType = FileType(&FindData);
        if (FType == TYPE_FILE)
        {
            AnsiString FileName = AnsiString(FindData.cFileName);
            if (GetFileExtention(FileName) == "dat")
            {
                /*ТУТ И ВЫЛАЗЕЕТ ОШИБКА!*/  
                ResultFilesList->Items->Add();
                int count = ResultFilesList->Items->Count;
                ResultFilesList->Items->Item[count-1]->Caption = count;
                ResultFilesList->Items->Item[count-1]->SubItems->Add("");
                ResultFilesList->Items->Item[count-1]->SubItems->
                    Add(AnsiString(CurrPath)+"\\"+FileName);
                ResultFilesList->Items->Item[count-1]->SubItems->Add(IntToStr(count) + "0");
            }

        }
        else if (FType == TYPE_DIR)
        {
            SetCurrentDirectory(FindData.cFileName);
            LoadFilesInList("*");
            SetCurrentDirectory("..");
        }
    }
    while (FindNextFile(SearchHandle, &FindData));
}
//---------------------------------------------------------------------------
static unsigned __stdcall ThFunc(void * arg)
{
    ResultsImportForm->LoadFilesInList(".");
    return 0;
}
//---------------------------------------------------------------------------
void __fastcall TResultsImportForm::FormActivate(TObject *Sender)
{
    DirectoryLabel->Caption = m_strPath;
    SetCurrentDirectory(m_strPath.c_str());

    HANDLE Thread;
    unsigned threadId;
    Thread = (HANDLE)_beginthreadex(NULL, 0, ThFunc, (void*)0, 0, &threadId);

    if (Thread == INVALID_HANDLE_VALUE)
        MessageBox(NULL, "Не удалось создать поток поиска файлов.", "Ошибка",
            MB_ICONWARNING | MB_OK);
}




Это сообщение отредактировал(а) Bunny - 16.8.2006, 20:43
PM MAIL ICQ   Вверх
_hunter
Дата 17.8.2006, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 24
Всего: 98



если ты только начинающий -- какой, нафик, _beginthreadex?!
используй TThread и его метод Synchronize


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Bunny
Дата 17.8.2006, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 22.3.2006

Репутация: 1
Всего: 1



_hunter, TThread есть только в Билдере, а _beginthreadex можно использовать везде. Попробую TThread, если решит проблему - хорошо, но хотелось бы знать где здесь ошибка!

Попробовал TThread - вылетает таже самая ошибка, вопрос остается открытым.

Это сообщение отредактировал(а) Bunny - 17.8.2006, 15:25
PM MAIL ICQ   Вверх
_hunter
Дата 17.8.2006, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 24
Всего: 98



Цитата(Bunny @  17.8.2006,  15:06 Найти цитируемый пост)
TThread есть только в Билдере, а _beginthreadex можно использовать везде

ага. и TResultsImportForm (точнее TForm) тоже везде есть ;)

Цитата(Bunny @  17.8.2006,  15:06 Найти цитируемый пост)
Попробовал TThread - вылетает таже самая ошибка

еслибы ты всю фразу прочитал (про Synchronize я имею в виду)...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Romikgy
Дата 17.8.2006, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 11
Всего: 146



просто _hunter имеет ввиду, что
Цитата(Bunny @  17.8.2006,  14:06 Найти цитируемый пост)
TThread есть только в Билдере

здесь есть синхронизация 
Цитата(_hunter @  17.8.2006,  14:41 Найти цитируемый пост)
про Synchronize я имею в виду

Цитата(Bunny @  17.8.2006,  14:06 Найти цитируемый пост)
 _beginthreadex можно использовать везде

А здесь ее самому надо организовывать, ручками....
так что выбирай или то что у борланда , где все за тебя сделали,
или то что везде работает , но надо самому поработать!
Это почитай хоть и на дельфи но это имхо основы
http://forum.vingrad.ru/index.php?showtopic=60076


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Artemon
Дата 17.8.2006, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: 7
Всего: 20



Все вокруг жа около, вот нет что бы сказать человеку:

Все ф-ии которые используют VCL - необходимо помещать в Synchronize;


#include <vcl.h>

 void __fastcall Execute()
{
  Synchronize( MMY_ESSAGE );
}

void MMY_ESSAGE()
{
  ShowMessage("TEST");
}


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
_hunter
Дата 17.8.2006, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 24
Всего: 98



по-моему в справке тоже самое написанно...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Bunny
Дата 17.8.2006, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 22.3.2006

Репутация: 1
Всего: 1



Artemon, именно так и было написано:
Код

void __fastcall TMyThread::Execute()
{
while(!Terminated) Synchronize(MyFunction);
}

Да и как я понимаю синхронизация нужна когда есть несколько потоков, чтобы не допустить одновременного использования общих ресурсов?! А у меня один поток! Может из-за рекурсии?
PM MAIL ICQ   Вверх
Artemon
Дата 17.8.2006, 21:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: 7
Всего: 20



Да нипричем тут твоя рекурсия.
синхронизировать нужно всегда с vcl.

Покажи новый вариант кода с TThread


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
BreakPointMAN
Дата 18.8.2006, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 15.9.2004
Где: Saratov

Репутация: 6
Всего: 24



Цитата(Bunny @  17.8.2006,  21:12 Найти цитируемый пост)
А у меня один поток!

Правда? Считаем... в одном потоке работает VCL, другой поток создаешь ты для необходимых тебе манипуляций... итого потоков: ?


--------------------
"Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце")
PM WWW ICQ   Вверх
Bunny
Дата 19.8.2006, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 22.3.2006

Репутация: 1
Всего: 1



Код

__fastcall TLoadThread::TLoadThread(bool CreateSuspended)
    : TThread(CreateSuspended)
{
    FreeOnTerminate = true;
}
//---------------------------------------------------------------------------
void __fastcall TLoadThread::Execute()
{
    Synchronize(LoadFunction);
}
//---------------------------------------------------------------------------
void __fastcall TLoadThread::LoadFunction()
{
    ResultsImportForm->LoadFilesInList(".");
}

Код

void __fastcall TResultsImportForm::FormActivate(TObject *Sender)
{
    DirectoryLabel->Caption = m_strPath;
    SetCurrentDirectory(m_strPath.c_str());

    TLoadThread * LoadThread = new TLoadThread();
/*подскажите как удалить этот указатель?!*/
}

весь остальной код остался прежним.
Ошибка таже: "Access violation at addres ..."
PM MAIL ICQ   Вверх
Romikgy
Дата 19.8.2006, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 11
Всего: 146



Цитата(Bunny @  19.8.2006,  16:32 Найти цитируемый пост)
/*подскажите как удалить этот указатель?!*/

а чем он те не нравится?
Цитата(Bunny @  19.8.2006,  16:32 Найти цитируемый пост)
ResultsImportForm->LoadFilesInList(".");

эта ф-ция без потока вообще работает?


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Bunny
Дата 20.8.2006, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 22.3.2006

Репутация: 1
Всего: 1



Цитата

эта ф-ция без потока вообще работает?

работает, я об этом уже писал, и во время работы этой функции вся форма недоступна.

PM MAIL ICQ   Вверх
_hunter
Дата 21.8.2006, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 24
Всего: 98



еще код LoadFilesInList() показать не помешалобы...
+ ты о такой полезной штуке как отладчик слышал?
++ ты ссылку Romikgy похоже не читал потому как смысла в этом коде (точнее использования тут потоков) я не вижу...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Romikgy
Дата 21.8.2006, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 11
Всего: 146



Цитата(_hunter @  21.8.2006,  10:08 Найти цитируемый пост)
ты ссылку Romikgy похоже не читал потому как смысла в этом коде 


_hunter, о какой ссылке речь ?


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
_hunter
Дата 21.8.2006, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 24
Всего: 98





--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Bunny
Дата 21.8.2006, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 22.3.2006

Репутация: 1
Всего: 1



Господин, _hunter.
Смысл использования потоков здесь ясен, я даже объяснял зачем он мне тут нужен, и код функции LoadFilesInList() уже приведен выше => делаю вывод, что это Вы не вникаете в тему и не читаете то, что тут уже написано! И свои "замечания" по поводу отладчика оставьте, пожалуйста, у себя.
PM MAIL ICQ   Вверх
Romikgy
Дата 21.8.2006, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 11
Всего: 146





Цитата(Bunny @  16.8.2006,  19:40 Найти цитируемый пост)
 ResultsImportForm->LoadFilesInList(".");

почему точка а не *?


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
_hunter
Дата 21.8.2006, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 24
Всего: 98



Цитата(Bunny @  21.8.2006,  11:34 Найти цитируемый пост)
Смысл использования потоков здесь ясен

дык просвети меня темного...
точнее приведи контр-аргумент к следующей фразе: метод, вызываемый Synchronize() выполняется в основном потоке VCL. откуда вывод: приведенный код полностью аналогичен коду, в котором вызов ResultsImportForm->LoadFilesInList("."); происхоит из обработчика нажатия на какую-нить кнопку...

насчет "код функции приведен выше": я считаю что весь код, относящийся к проблеме должен находиться в одном месте. и искать его по двум страницам (или помнить что в этой теме писалось н дней назад) у меня желания нет.

по поводу  "замечания по поводу отладчика" еслибы ты четко указал строку, вызывающую ошибку -- никаких претензий небылобы...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Bunny
Дата 21.8.2006, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 22.3.2006

Репутация: 1
Всего: 1



_hunter, строку, вызывающую ошибку я указал
Код

            if (GetFileExtention(FileName) == "dat")
            {
                /*ТУТ И ВЫЛАЗЕЕТ ОШИБКА!*/  
                ResultFilesList->Items->Add();
                int count = ResultFilesList->Items->Count;
                ResultFilesList->Items->Item[count-1]->Caption = count;
                ResultFilesList->Items->Item[count-1]->SubItems->Add("");
                ResultFilesList->Items->Item[count-1]->SubItems->
                    Add(AnsiString(CurrPath)+"\\"+FileName);
                ResultFilesList->Items->Item[count-1]->SubItems->Add(IntToStr(count) + "0");
            }

Romikgy, "." - поиск в текущем каталоге.
Перенес функции поиска и добавления файлов в список в сам класс потока:
Код

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

#ifndef LoadThreadUnitH
#define LoadThreadUnitH
//---------------------------------------------------------------------------
#include <Classes.hpp>
//---------------------------------------------------------------------------
class TLoadThread : public TThread
{
private:
    void LoadFilesInList(LPCTSTR PathName);
    DWORD FileType(LPWIN32_FIND_DATA pFileData);
    AnsiString GetFileExtention(AnsiString FileName);
    AnsiString m_strCurrPath;
    AnsiString m_strFileName;
protected:
    void __fastcall Execute();
public:
    __fastcall TLoadThread(bool CreateSuspended = false);
    void __fastcall UpdateList();
};
//---------------------------------------------------------------------------
#endif

Код

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

#include <vcl.h>
#pragma hdrstop

#include "LoadThreadUnit.h"
#include "ResultsImportUnit.h"
#pragma package(smart_init)

#define TYPE_FILE 1
#define TYPE_DIR 2
#define TYPE_DOT 3
//---------------------------------------------------------------------------

//   Important: Methods and properties of objects in VCL can only be
//   used in a method called using Synchronize, for example:
//
//      Synchronize(UpdateCaption);
//
//   where UpdateCaption could look like:
//
//      void __fastcall TLoadThread::UpdateCaption()
//      {
//        Form1->Caption = "Updated in a thread";
//      }
//---------------------------------------------------------------------------

__fastcall TLoadThread::TLoadThread(bool CreateSuspended)
    : TThread(CreateSuspended)
{
    FreeOnTerminate = true;
}
//---------------------------------------------------------------------------
void __fastcall TLoadThread::Execute()
{
    LoadFilesInList(".");
    return;
}
//---------------------------------------------------------------------------
void TLoadThread::LoadFilesInList(LPCTSTR PathName)
{
    HANDLE SearchHandle;
    WIN32_FIND_DATA FindData;
    DWORD FType;
    TCHAR CurrPath[256];

    int pos = GetCurrentDirectory(255, CurrPath);
    CurrPath[pos+1] = NULL;

    SearchHandle = FindFirstFile(PathName, &FindData);
    do
    {
        FType = FileType(&FindData);
        if (FType == TYPE_FILE)
        {
            AnsiString FileName = AnsiString(FindData.cFileName);
            if (GetFileExtention(FileName) == "dat")
            {          
                m_strCurrPath = AnsiString(CurrPath);
                m_strFileName = FileName;

/*Ошибка осталась здесь же :((*/

                Synchronize(UpdateList);
            }

        }
        else if (FType == TYPE_DIR)
        {
            SetCurrentDirectory(FindData.cFileName);
            LoadFilesInList("*");
            SetCurrentDirectory("..");
        }
    }
    while (FindNextFile(SearchHandle, &FindData));
}
//---------------------------------------------------------------------------
AnsiString TLoadThread::GetFileExtention(AnsiString FileName)
{
    int pos = FileName.LastDelimiter(".");
    return FileName.Delete(1, pos);
}
//---------------------------------------------------------------------------
DWORD TLoadThread::FileType(LPWIN32_FIND_DATA pFileData)
{
    bool IsDir;
    DWORD FType;
    FType = TYPE_FILE;
    IsDir = (pFileData->dwFileAttributes &
            FILE_ATTRIBUTE_DIRECTORY) != 0;

    if (IsDir)
    {
        if (AnsiString(pFileData->cFileName) == "." ||
            AnsiString(pFileData->cFileName) == "..")
            FType = TYPE_DOT;
        else
            FType = TYPE_DIR;
    }
    return FType;
}
//---------------------------------------------------------------------------
void __fastcall TLoadThread::UpdateList()
{
    ResultsImportForm->ResultFilesList->Items->Add();
    int count = ResultsImportForm->ResultFilesList->Items->Count;
    ResultsImportForm->ResultFilesList->Items->Item[count-1]->Caption = count;
    ResultsImportForm->ResultFilesList->Items->Item[count-1]->SubItems->Add("");
    ResultsImportForm->ResultFilesList->Items->Item[count-1]->SubItems->
                    Add(AnsiString(m_strCurrPath)+"\\"+m_strFileName);
    ResultsImportForm->ResultFilesList->Items->Item[count-1]->SubItems->Add(IntToStr(count) + "0");
}

Ошибка таже, происходит в UpdateList при обращении к ResultsImportForm->ResultFilesList.
_hunter , дублировать код для захламления топика я не буду, а если
Цитата

у меня желания нет.

Вас никто не заставляет smile
PM MAIL ICQ   Вверх
Romikgy
Дата 21.8.2006, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 11
Всего: 146



Цитата(Bunny @  21.8.2006,  11:49 Найти цитируемый пост)
"." - поиск в текущем каталоге.

* тоже ищет в текущем каталоге smile
не надо те потоки , чесн слово , у тя вся работа идет с формой
А глюка вот почему имхо 

Цитата(Bunny @  21.8.2006,  11:49 Найти цитируемый пост)
ResultsImportForm

эта переменная у тя в потоке неизвестна, передай при создании потока указатель на твою форму, и внутри потока юзай этот указатель а не саму форму


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
_hunter
Дата 21.8.2006, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 24
Всего: 98



"тут" (и "здесь") это, простите, где? на строке с комментарием (строки №1.3 и 3.62 в приведенном листинге)? -- что-то сильно в этом сомневаюсь...

Цитата(Bunny @  21.8.2006,  12:49 Найти цитируемый пост)
Ошибка таже, происходит в UpdateList при обращении к ResultsImportForm->ResultFilesList.

дык берем отладчик и смотрим NULL он (ResultFilesList) или не NULL (кстати эту проверку не помешалобы в код включить)

P.S.
(насчет захламления)
избыточным кодом ты топик захламляеш не меньше...

Добавлено @ 13:14 
Цитата(Romikgy @  21.8.2006,  13:05 Найти цитируемый пост)
эта переменная у тя в потоке неизвестна

была бы неизвестна -- код бы не скомпилился...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Bunny
Дата 21.8.2006, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 22.3.2006

Репутация: 1
Всего: 1



Romikgy, нужен мне поток smile Файлы добавляются долго, и если не делать это в потоке, но форма "зависнет" и пользователь начнет нервничать.
 smile Ура! Заработало. Передал указатель на список ResultFilesList конструктору потока и через него обращался.
Romikgy, спасибо за идею  smile 
_hunter тоже спасибо  smile 

Это сообщение отредактировал(а) Bunny - 21.8.2006, 15:38
PM MAIL ICQ   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0745 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.