ребят, сорри за тему. туплю что то. в общем как сделать это: вместо такой записи ChekThread1*thr1=new ChekThread1(true); нужно сделать что то типа того: i=1; ChekThread*thr=new ChekThread(true); как правильно записать? заранее благодарю. пытаюсь учиться работать с несколькими потоками. искал в этом разделе подобную тему но ее выпилили вроде.
M_script большое спасибо! в очередной раз очень помогли! по вашим примерам я много чего освоил. теперь вот и многопоточность буду тестить рекпект!
не подскажите еще как сюда >[100]<; поставить бы цифры тоже из переменной? UPD: хотя не нужно совсем ) запилил int thread; extern thread; и все гуд )
Бред, можно же написать так (привожу на примере DWORD'ов, но вместо них что угодно подставить можно): PHP: size_t a = 100; //заранее неизвестно DWORD *arr = new DWORD[a]; //создаем массив for(size_t num = 0; num < a; num++) arr[num] = num; //заполняем массив числами for(size_t num = 0; num < a; num++) //выводим массив printf("%u\r\n",arr[num]); delete[] arr; //удаляем массив
GRRRL Power, не нужно путать массив указателей и указатель на массив А если это "что угодно" - класс TThread (о котором и идет речь в теме), и подходящего конструктора просто нет, что делать?
Прошу прощения, что влез в чужой разговор, но, блин, M_script, ты в программировании вообще шаришь? PHP: // PTThead есть алиас для TThread* size_t a = 100; //заранее неизвестно PTThread *arr = new PTThread[a]; for(size_t i = 0; i < a; ++i) arr[i] = new TThread(i, true, "whatever"); for(size_t i= 0; i < a; ++i) arr[i]->Join(); for(size_t i= 0; i < a; ++i) delete arr[i]; delete[] arr; Вот до этого так трудно додуматься? Извини, но это очевидно.
Мда, M_script... Привожу пример на классе БЕЗ конструктора по умолчанию: PHP: #include "stdio.h" #include "windows.h" typedef class _ololo { public: _ololo(int num) :number(num) {} int get_number() { return number; } private: _ololo(); int number; } shkololo, *Pshkololo; int main(int argc, char* argv[]) { size_t a = 10; Pshkololo *arr = new Pshkololo[a]; for(size_t i = 0; i < a; i++) arr[i] = new shkololo(i); for(size_t i = 0; i < a; i++) printf("%u\r\n", arr[i]->get_number()); for(size_t i = 0; i < a; i++) delete arr[i]; delete[] arr; system("PAUSE"); return 0; } Bers тоже правильно сказал.
Эээ... Я даже не знаю, что тут можно ответить... По-моему, в моем сообщении был точный ответ на вопрос ТС. Ему же надо было работать с несколькими указателями на некий класс (CheckThread или как его там), так? Я написал код, который как раз работу с несколькими указателями и выполняет. Поможет ли ему мой совет? Если он страдает дислексией - то нет (но тогда ему вообще советы в письменном виде не помогут). Если же он в состоянии прочесть ответ на свой же вопрос - думаю, совет ему будет полезен (по крайней мере не навредит).
О_О сколько инфы ) впринципе оч полезно, но я просто хотел чтоб юзер мог указать кол-во потоков. усложнять нелюблю код, всегда стараюсь написать проще. потому как я не профи, учусь по гуглу. поэтому просто напросто сделал так: i=0; ChekThread1* thr[5]; while (i<thread) { thr = new ChekThread1(true); thr->Resume(); IdHTTP++; i++; ::Sleep(1000); } if(TrackBar1->Position==1) { thread=2; } if(TrackBar1->Position==2) { thread=3; } if(TrackBar1->Position==3) { thread=4; } if(TrackBar1->Position==4) { thread=5; }
Я имел ввиду конкретно класс TThread, чтобы взять код отсюда, вставить его в проект и все заработало. оффтоп Смысл такой же, как и в смене временного удостоверения личности на утерянный когда-то паспорт. Уже много раз отвечал на этот вопрос: Создал новый аккаунт, потому что забыл пароль от старого, а почтового сервиса, на который регался этот акк больше не существует, поэтому не мог восстановить. В июне увидел https://forum.antichat.ru/thread213333.html, пункт 2, поэтому и восстановил. p.s.: все равно считаю, что конкретно в этом случае лучше использовать массив указателей заранее известной длины. good_man, то же самое: PHP: ChekThread1* thr[5]; for(int i = 0; i < TrackBar1->Position; ++i) { thr[i] = new ChekThread1(false); IdHTTP++; Sleep(1000); }
Я хоть борландом и не увлекаюсь, но попробую вам помочь: PHP: size_t a = TrackBar1->Position; //получили число потоков typedef ChekThread1 *PChekThread1; PChekThread1 *thr = new PChekThread1[a]; //массив из нужного числа потоков, а не 100500 заранее, как предлагал мскрипт for(size_t i = 0; i < a; i++) { thr[i] = new ChekThread1(true); thr[i]->Resume(); //еще какой-то код инициализации... IdHTTP++; Sleep(1000); } .......... //в процедуре деинициализации, которая очищает память после работы, напишите так: for(size_t i= 0; i < a; ++i) //a - число потоков delete thr[i]; delete[] thr; Учитесь сразу программировать как надо. А вопрос к M_script - представьте, что вместо потоков вам надо создать неизвестное число объектов некоторого класса, и число это - от 1 до 100000. Будете делать статический массив из 100000 элементов?
Буду делать так, как будет наиболее оптимально для решения поставленной задачи. В случае с TThread я всегда использую статический массив, потому что это удобнее, а так как количество элементов небольшое, затраты памяти не критичны. Вы мне экзамен по программированию решили устроить? Зачетку готовить?
Ну вообще говоря лучше два, или даже три примера. Используем статику если известен размер(до компиляции, ну или в процессе компиляции). Круто выигрываем в производительности. (example M_script) Используем динамику если неизвестен размер и мы его точно узнаем в процессе выполнения. (example GRRRL Power) Используем хэш(или лист) когда неизвестен размер и мы его не узнаем(ну или он будет меняться).