Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
tiptop_crazy
0 / 0 / 0
Регистрация: 27.05.2012
Сообщений: 39
#1

Старт потока с 2 параметрами - C++

24.03.2013, 23:16. Просмотров 323. Ответов 2
Метки нет (Все метки)

Нужно запустить функцию в новом потоке. Но у функции 2 параметра. Естественно, что я попытался создать структуру, и передавать эту структуру, но компилятору это не нравится. В интернете везде ответ "создайте структуру". Я в тупике..) Подскажите, кто знает.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include <windows.h>
#include <iostream>
#include <fstream>
#include <process.h>
using namespace std;
 
void work(char*,char*);
struct files
{
    char* in;
    char* out;
 
};
int main()
{
    HANDLE  hThread;
    DWORD   IDThread;
    files f;
    f.in="in.txt";
    f.out="out.txt";
    hThread = (HANDLE)
        _beginthreadex(NULL, 0, work, &f, 0, &IDThread);
    if (hThread == NULL)
        return GetLastError();
    WaitForSingleObject(hThread, INFINITE);
    CloseHandle(hThread);
    system("PAUSE");
    return 0;
}
 
void work(files f)
{
    FILE *in,*out;
    float mass[9];
    in=fopen(f.in,"r");
    if(in==NULL)
        return;
    else
    {
        for(int i=0;i<9;i++)
        {
            fscanf(in,"%f",&mass[i]);
            cout<<mass[i]<<endl;
        }
        
    }
    fclose(in);
    out=fopen(f.out,"w");
    if(out==NULL)
        return;
    else
    {
        float res=mass[0]*mass[4]*mass[8]+mass[2]*mass[3]*mass[7]+mass[1]*mass[5]*mass[6]
        -mass[2]*mass[4]*mass[6]-mass[1]*mass[3]*mass[8]-mass[0]*mass[5]*mass[7];
        fprintf(out,"%f",res);
    }
    fclose(out);    
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.03.2013, 23:16
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Старт потока с 2 параметрами (C++):

Запуск потока для функции с параметрами - C++
Доброго дня! Что хочется: распараллелить выполнение процедуры func. Давая новым потокам соответствующие параметры. На c# я...

Вызывть метод одного потока из другого потока - C++
Здравствуйте, подскажите пожалуйста, как можно реализовать такую штуку : есть один поток(1), который вызывает метод у обьекта, этот...

Вернуть на старт - C++
Всем привет:). Говорю сразу - я жесткий нуб. Начал изучение C++ буквально сегодня. Прошу вас, не относитесь ко мне как к идиоту, я как раз...

Первый старт. - C++
Прошу помочь. Писал раньше на С# , PHP. Щас перехожу на С++ и есть несколько вопросов. Я собираюсь писать игры с использованием API...

Создание потока из потока. - C++
Надо создать поток 1, в нем создать поток 2, сам я жуткий дураг, немаловероятно что правильного в коде вообще ничего нет ) ругается...

C++ Threads или как запрограммировать кнопку Старт и Стоп - C++
Погуглил нечего не нашёл на эту тему..

2
anmartex
...
1708 / 1201 / 496
Регистрация: 12.02.2013
Сообщений: 1,978
25.03.2013, 08:28 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include <windows.h>
#include <iostream>
#include <fstream>
#include <process.h>
 
using namespace std;
 
unsigned __stdcall work(void*);
 
struct files
{
   const char* in;
   const char* out;
};
 
int main()
{
   HANDLE hThread;
   unsigned IDThread;
   files f;
   f.in = "in.txt";
   f.out = "out.txt";
   hThread = (HANDLE)_beginthreadex(NULL, 0, &work, &f, 0, &IDThread);
 
   if (hThread == NULL)
   {
      return GetLastError();
   }
   WaitForSingleObject(hThread, INFINITE);
   CloseHandle(hThread);
   system("PAUSE");
   return 0;
}
 
unsigned work(void* arg)
{
   files f = *reinterpret_cast<files*>(arg);
   FILE* in, *out;
   float mass[9];
   in = fopen(f.in, "r");
   if (in == NULL)
   {
      return 1;
   }
 
   for (int i = 0; i < 9; i++)
   {
      fscanf(in, "%f", &mass[i]);
      cout << mass[i] << endl;
   }
 
   fclose(in);
   out = fopen(f.out, "w");
   if (out == NULL)
   {
      return 1;
   }
 
   float res = mass[0] * mass[4] * mass[8] + mass[2] * mass[3] * mass[7] + mass[1] * mass[5] * mass[6] -
               mass[2] * mass[4] * mass[6] - mass[1] * mass[3] * mass[8] - mass[0] * mass[5] * mass[7];
   fprintf(out, "%f", res);
 
   fclose(out);
 
   return 0;
}
0
tiptop_crazy
0 / 0 / 0
Регистрация: 27.05.2012
Сообщений: 39
26.03.2013, 00:07  [ТС] #3
Огромное спасибО)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.03.2013, 00:07
Привет! Вот еще темы с ответами:

Как создать старт приложения на определенной кнопки клавиатуры - C++
Вот например есть таймер как сделать так чтобы таймер запустился\остановился(остановился и збросился) при нажатии какой-то конкретной...

Два потока, две очереди, два потока - C++
Есть две очереди. Каждая из них заполняется своим потоком. Есть два потока, которые достают данные из своей очереди. Но когда одна из...

Функции с параметрами - C++
Здравствуйте. Поясните, пожалуйста, про передачу параметров по указателю, ссылкам и значению. Непростая тема для меня, запутанная, сразу...

Программа с параметрами - C++
Как сделать так, чтобы при задании моей программе параметра, типа file.avi, запускал этот файл?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru