Форум программистов, компьютерный форум CyberForum.ru

Потоки. Синхронизация. Передача параметра при создании потока. - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Запись матрицы в файл http://www.cyberforum.ru/cpp-beginners/thread234933.html
Ребят,выручайте а Вообщем надо считать матрицы из файлов,перемножить и записать в 3ий,до меня плохо доходит как записать результат в левый файл пока код такой: #include <stdio.h> #include <iostream> int main(int argc, char* argv) { const int size = 3; int A = { 0 };
C++ Необходимо написать программку.. Необходимо разработать программу, которая считывает текст из файла и выводит его на экран с заменой первой буквы каждого слова на прописную. Буду очень благодарна. http://www.cyberforum.ru/cpp-beginners/thread234926.html
C++ Построчная работа программы
Добрый вечер! Большая просьба, объясните, пожалуйста, построчно, работу программы: int main() { int const x = 21; //величина количества строк for(int i = 0; i < x; ++i) { for(int j = x; j > i; --j) cout << ' '; for(int j = 0; j < 2*i - 1; ++j) cout << 'x';
звуки bios C++
сразу извинюсь за вопрос, возможно он тупой или некорректный. суть такова: можно ли в си++ сделать такую прогу, чтобы при нажатии на определенную клавишу воспроизводился звук биос? если да, то как?
C++ ЕГЭ Информатика С2 http://www.cyberforum.ru/cpp-beginners/thread234887.html
Найти и вывести наименьший номер элемента массива, равного Х, или сообщение, что такого элемента нет. #include <iostream> using namespace std; #define N 5 void main (void) {setlocale (LC_ALL, "Russian"); int a; int i,j=0,x; for (i=0;i<N;i++) cin>>a;
C++ BGL на DEVC++ Здравствуйте. Я не знаю как подлюлючить BGL в DEVC++. Если кто знает напишите пож. подробнее

Показать сообщение отдельно
sanya923
69 / 69 / 19
Регистрация: 26.01.2011
Сообщений: 160
28.01.2011, 10:35     Потоки. Синхронизация. Передача параметра при создании потока.
Здравствуйте!
Разбираюсь с потоками. Возникли проблемы то ли с синхронизацией, то ли с созданием потоков и передачей в потоковую функцию параметров, я конкретно не знал с чем. Ну и в концов замучившись полностью, я решил написать небольшой кодик, всё же с ним легче разбираться.
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
#include "stdafx.h"
#include <iostream>
#include "windows.h"
#include "stdlib.h"
using namespace std;
 
 
HANDLE sp,uvv[3];
 
DWORD WINAPI Thread2(LPVOID lpParam1)
{
    double t1;
    int *i = new int;
    *i=*(int*)lpParam1;
    while (true)
    {
        WaitForSingleObject(sp,INFINITE);
            cout<<"Potok "<<*i<<endl;
        ReleaseSemaphore(sp,1,NULL);
        t1=rand();
        t1=t1/32678;
        t1=3000*t1;
        Sleep(unsigned(t1));
    }
    return 0;
}
 
 
VOID main(VOID)
{
    int rt;
    sp=CreateSemaphore(NULL,1,1,NULL);
    for (int i=0;i<3;i++)
    {
        uvv[i]=CreateThread(NULL,0,Thread2,&i,0,NULL);
                WaitForSingleObject(sp,INFINITE);
              cout<<"Sozdan prozess "<<i<<endl;
        ReleaseSemaphore(sp,1,NULL);
    }
    cin>>rt;
}
И обнаружил следующее:
Если я коменчу 37 и 39 строчку, то при выводе 19 появляется номер 3, хотя его не должно быть, при тройке же цикл в блок не входит уже, а также выводятся не все номера, т.е. 0,1,2, а два каких-то. Если не коменчу, то всё норм. По логике без них должно же всё нормально работать. В Delphi писал, было всё норм. А также я не пойму как влияет на работу 32 и 41 строчка, если их закоментить, то дохнет.

Добавлено через 12 часов 40 минут
Обойти 32 и 41 я не смог, особо понять почему при закоменчивании 37 и 39 непонятные дела происходят, но зато логически переписал по другому. Добавил еще один семафор, чтобы контролировать цикл, раз он раньше каким-то образом убегает вперед, чем создаётся поток.
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
#include "stdafx.h"
#include <iostream>
#include "windows.h"
#include "stdlib.h"
using namespace std;
 
 
HANDLE sp,sk,uvv[3];
 
DWORD WINAPI Thread2(LPVOID lpParam1)
{
    double t1;
    int *i = new int;
    *i=*(int*)lpParam1;
    ReleaseSemaphore(sk,1,NULL);
    while (true)
    {
        WaitForSingleObject(sp,INFINITE);
            cout<<"Potok "<<*i<<endl;
        ReleaseSemaphore(sp,1,NULL);
        t1=rand();
        t1=t1/32678;
        t1=3000*t1;
        Sleep(unsigned(t1));
    }
    return 0;
}
 
 
VOID main(VOID)
{
    int rt;
    sp=CreateSemaphore(NULL,1,1,NULL);
    sk=CreateSemaphore(NULL,0,1,NULL);
    for (int i=0;i<3;i++)
    {
                 uvv[i]=CreateThread(NULL,0,Thread2,&i,0,NULL);
                 WaitForSingleObject(sk,INFINITE);
    }
    cin>>rt;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 04:27. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru