Форум программистов
 
О проблемах, например, с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

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

Восстановить пароль
Повторная активизация e-mail

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Ответ
 
Опции темы
Старый 05.03.2013, 19:41   #1
KlIm16
Пользователь
 
Регистрация: 16.02.2013
Сообщений: 37
Вопрос программа с потоками

Сделал половину кода в форме:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit2.h"
#include <stdio.h>
#include <conio.h>
#include <windows.h>

//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;
int a[100];
int k=0;
const n=4; //количество потоков
DWORD WINAPI ThreadFunc(PVOID pvParam)
{
int num,sum = 0,i;
num = 25*(*((int *)pvParam));
for(i=num;i<num+25;i++) sum += a[i]*a[i];
*(int*)pvParam = sum;
DWORD dwResult = sum;
return dwResult;
}
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
: TForm(Owner)
{

}
//---------------------------------------------------------------------------
void __fastcall TForm2::ПоказатиClick(TObject *Sender)
{
int x[n];
int i,rez = 0;
DWORD dwThreadId[n],dw,dwResult[n];
HANDLE hThread[n];
for (i=0;i<100;i++) a[i] = i;
//создание n дочерних потоков
for (i=0;i<n;i++)
{
x[i] = i;
hThread[i] = CreateThread(NULL,0,ThreadFunc,(PVO ID)&x[i], 0, &dwThreadId[i]);
if(!hThread);
}
// ожидание завершения n потоков
dw = WaitForMultipleObjects(n,hThread,TR UE,INFINITE);
// получение значений, переданных потоком в return
for (i=0;i<n;i++)
{
GetExitCodeThread(hThread[i],&dwResult[i]);
Form2->Memo1->Lines->Add((int)dwResult[i]);
}
for(i=0;i<n;i++) rez+=x[i];

Form2->Edit1->Text=rez;

}
//---------------------------------------------------------------------------
Не могу разобраться как сделать так что-бы число потоков n вводил пользователь, а результат оставался тот же...А так же если изменить n например на 3 (то есть 100 нацело не делится 3 ) чтобы оставшийся 10 елем. массива считал последний поток.
KlIm16 вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с потоками Bax77 Общие вопросы Delphi 3 29.01.2013 15:11
Работа с потоками QuadroX Помощь студентам 10 20.09.2011 13:24
Работа с потоками derElektroBesen Помощь студентам 3 17.07.2011 13:33
Работа с потоками gagarin0 Win Api 4 05.11.2010 02:30
Проблемы с потоками в С m9yt Общие вопросы C/C++ 4 14.04.2010 13:25


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS