Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
NooNameR
0 / 0 / 1
Регистрация: 03.03.2011
Сообщений: 25
#1

Заполнение двух потоков числами - C (СИ)

08.02.2012, 15:43. Просмотров 809. Ответов 4
Метки нет (Все метки)

Доброго времени суток, вот у меня есть код, который выполняет заполнения 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
67
68
69
70
71
#include "stdafx.h"
#include <windows.h>
#include <process.h>   
#include <stddef.h>
#include <stdlib.h>
#include <conio.h>
HANDLE hMutex;
int buf,k,count, mCount=0 ,i=0;
bool mBool;
unsigned __stdcall MyFunc(void *arg)
{
       DWORD dwWaitResult;
       int *x = (int *)arg;
       while (true)
       {
             dwWaitResult = WaitForSingleObject( hMutex, 5000L);
             if (mBool == true)
             {
                    if (mCount!=0){
                    if (mCount%2!=0){mBool=false; buf=2; i++;}
                    else if (mCount%2==0){mBool=false; buf=3;i++;}
                    } else {
                           if (count%2==0){mBool=false; buf=2;}
                           else if (count%2!=0){mBool=false; buf=3;}
                    }
                    printf("%d ",buf);
             }
             Sleep(100L);
             ReleaseMutex(hMutex);
       }
       _endthreadex(0);
       return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
       HANDLE hThreads[2];
       unsigned uThreadsId[2];
       int n[2]={2,3};
       k  = 0;
       count =0;
       mBool = true;
       hMutex = CreateMutex(NULL, FALSE, NULL);
       printf("2 3 2 3 2 2 2 2 3 3 3 3 2 3 2 3 2 2 2 2 3 3 3 3\n\n");
       if (hMutex == NULL)
       {
             printf("CreateMutex error: %d\n", GetLastError());
       }
       hThreads[0]=(HANDLE)_beginthreadex(NULL, 0, &MyFunc, &n[0],0, &uThreadsId[0]);
       hThreads[1]=(HANDLE)_beginthreadex(NULL, 0, &MyFunc, &n[1],0, &uThreadsId[1]);
       while (count<=23)
       {
             if (mBool==false)
             {
                    mBool=true;
                    //printf("%d ",buf);
                    count++;
                    if(count%4==0){
                           if(i!=8) mCount++;
                           else {
                                  mCount=0;
                                  i=0;
                           }
                    }
             }
             Sleep(10L);
       }
       //mBool=false;
       //printf("\n");
       Sleep(2000L);
       return 0;
}

http://www.cyberforum.ru/c-beginners/thread367460.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.02.2012, 15:43
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Заполнение двух потоков числами (C (СИ)):

Заполнение массива уникальными числами
setlocale(LC_ALL, &quot;Russian&quot;); int mn1, mn2, mn3, mn_out, ke1, ke2, ke3,...

Заполнение массива случайными числами
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; int main(int argc, char *argv,int...

Заполнение массива случайными числами
Добрый вечер,помогите написать программу которая забивает массив рандомными...

Заполнение массива заданными числами
Доброго времени суток. Столкнулся с проблемкой. Нужно заполнить две матрицы...

Создание двух потоков в цикле
Помогите пожалуйста, приведите пример: программа создает 2 потока в цикле. А то...

4
ejjjik
8 / 8 / 3
Регистрация: 06.06.2010
Сообщений: 25
08.02.2012, 16:21 #2
C++
1
while (count<=23)
-
C++
1
while (count<23)
?
0
NooNameR
0 / 0 / 1
Регистрация: 03.03.2011
Сообщений: 25
08.02.2012, 17:39  [ТС] #3
не катит, так последний символ не допечатывает, вон сверху последовательность чисел..

Добавлено через 21 минуту
и для того чтоб это увидеть стоит поменять последний слип из 2000L на 10L
0
retmas
Жарю без масла
865 / 747 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
08.02.2012, 18:02 #4
у вас ни один созданный поток не завершается. цикл бесконечный, а условия выхода нет.
0
NooNameR
0 / 0 / 1
Регистрация: 03.03.2011
Сообщений: 25
08.02.2012, 21:58  [ТС] #5
Цитата Сообщение от retmas Посмотреть сообщение
у вас ни один созданный поток не завершается. цикл бесконечный, а условия выхода нет.
если возможно можно подробнее, я в потоках пока начинающий, как их закрыть, или исправить условие?)
0
08.02.2012, 21:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.02.2012, 21:58
Привет! Вот еще темы с решениями:

Заполнение одномерного массива случайными числами
Здравствуйте! Написала программу по заполнению одномерного массива случайными...

Заполнение массива простыми числами начиная с 2
Мне нужно заполнить массив простыми числами начиная с 2. Я читал инфу о решете...

Заполнение массива целыми числами через цикл
Как заполнить массив целыми числами через цикл?

Заполнение массива типа float случайными числами
Как заполнить массив типа float случайными числами (Си)? на функцию void...


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

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

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