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

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

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

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

Ответ
 
Опции темы
Старый 05.03.2013, 20: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 вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


06:14.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.