Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.04.2020, 14:46   #1
Mat Bourn
Форумчанин
 
Регистрация: 13.04.2015
Сообщений: 141
По умолчанию Работа с потоками?

Всем доброго. У меня стоит задача вывести дерево каталогов в TreeView. Пользователю будет видно список локальных дисков например C: D: и т. д. И соответственно при нажатии на некоторый из них будет выводиться дерево.

Делаю я это с помощью отдельного потока. С потоками первый раз. Я не знаю как сделать правильно чтобы при нажатии на определенный диск поток заново начинал свое действие?


Код основной программы:

Код:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
TMyThread *Thr = new TMyThread(true); // создаем поток в приостановленном состоянии (true)
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
	: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 Label1->Caption = "C:\\*.*";   //  хочу передать потоку значение, но не знаю как это сделать правильно
 Thr->Resume();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
 Label1->Caption = "D:\\*.*";
 Thr->Resume();
}
//---------------------------------------------------------------------------
Немного кода потока:
Код:
//---------------------------------------------------------------------------
AnsiString GetName(const AnsiString &Path, const AnsiString &Addition)
{
 AnsiString ret = Path;
 ret.Delete(ret.Length()-2,3);
 ret+=Addition;
 return ret;
};
//---------------------------------------------------------------------------
 void AddDirs(TTreeView* ptrTree, TTreeNode* ptrNode, const AnsiString& Path)
{
 TSearchRec sr;
 AnsiString Dir;
		 if (FindFirst(Path, faDirectory, sr) == 0)
	   {
		  do
		 {
				  if ((sr.Name==".")||(sr.Name==".."))continue;
						 Dir =GetName( Path, sr.Name );
						if ( DirectoryExists ( Dir ) )
						AddDirs(ptrTree,ptrTree->Items->AddChild(ptrNode,sr.Name),Dir+"\\*.*");
		   } while (FindNext(sr)==0);
	   }
	   else
	   {
	   }

 FindClose(sr);
}
//---------------------------------------------------------------------------
void __fastcall TMyThread::Execute()
{
try
{
 FreeOnTerminate = true;
 Priority = tpLower;
 Form1->TreeView1->Items->Clear();
 AddDirs(  Form1->TreeView1,  Form1->TreeView1->Items->GetFirstNode(), Form1->Label1->Caption);
}
 catch(...)
{
}
}
//---------------------------------------------------------------------------
Mat Bourn вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с потоками Konstantin_ua Общие вопросы Delphi 9 04.03.2015 11:03
Работа с потоками в dll yaschenko Общие вопросы Delphi 6 05.04.2014 13:01
Работа с потоками. crazygoldbullet Win Api 7 13.04.2013 18:27
Работа с потоками den49 Помощь студентам 0 06.10.2009 14:52
Работа с потоками Neymexa Общие вопросы .NET 16 23.04.2009 17:42