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

Остановка второго потока останавливает также первый поток по непонятной причине - C++

Восстановить пароль Регистрация
 
Tolias28
202 / 117 / 2
Регистрация: 18.08.2010
Сообщений: 1,006
26.02.2013, 19:51     Остановка второго потока останавливает также первый поток по непонятной причине #1
Изучаю потоки и по ходу дела экспериментирую с ними в Visual Studio. Накидал код, который в первом потоке приостанавливает и возобновляет второй поток 1000 раз. А второй поток также себя останавливает в цикле каждые 10 миллисекунд с помощью такой строчки:
WaitForSingleObject(GetCurrentThread(), 10);

И вот по непонятной для меня причине цикл в первом потоке заступоривается еще на первых итерациях (у меня доходило максимум до 2-4 итерации). То есть, на консоли появляется такой вывод:
Остановка второго потока останавливает также первый поток по непонятной причине
и на этом все! Не могу понять почему так... Объясните пожалуйста, в чем причина. Огромное спасибо!

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
#include "stdafx.h"
#include <Windows.h>
#include <iostream>
#include <process.h>
 
using namespace std;
 
unsigned Counter;
 
unsigned __stdcall SecondThreadFunc( void* pArguments )
{
    cout << "In second thread...\n";
    while ( Counter < 1000000 )
    {
        WaitForSingleObject(GetCurrentThread(), 10);
        Counter++;
        cout << Counter;
    }
    cout << "Second thread exiting...\n";
    return 0;
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    HANDLE hThread;
 
    printf( "Creating second thread...\n" );
    hThread = (HANDLE)_beginthreadex( NULL, 0, &SecondThreadFunc, NULL, 0, NULL);
    for(int i = 0; i < 1000; i++)
    {
        SuspendThread(hThread);
        cout << "i=" << i << "\n";
        ResumeThread(hThread);
    }
    SuspendThread(hThread);
    CloseHandle( hThread );
    cout << "end of program";
    cin.get();
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.02.2013, 19:51     Остановка второго потока останавливает также первый поток по непонятной причине
Посмотрите здесь:

преобразовать массив так, чтобы между 0 ограничивающими первый отрезок, оказались элементы второго отрезка. C++
Дано целое число N(>1), а также первый член А и знаменатель D геометрической прогрессии. C++
C++ В массиве переставить местами первый и максимальный элементы, а также последний и минимальный
C++ Заданы два текста. Определить, можно ли получить первый текст перестановкой слов второго текста.
C++ Выходной поток первого числа, второго , суммы первого и второго чисел
C++ Дано целое число N (> 1), а также первый член A и разность D арифметической прогрессии
C++ Скопировать в первый файл текст из второго (в консоли)
C++ Остановка потока по нажатию клавиши

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tolias28
202 / 117 / 2
Регистрация: 18.08.2010
Сообщений: 1,006
26.02.2013, 20:05  [ТС]     Остановка второго потока останавливает также первый поток по непонятной причине #2
С функции, которая выполняется во втором потоке, вообще убрал все кроме цикла и инкрементирования и переменную Counter сделал локальной, но такая же проблема всеравно наблюдается
C++
1
2
3
4
5
6
7
8
9
unsigned __stdcall SecondThreadFunc( void* pArguments )
{
    unsigned Counter = 0;
    while ( Counter < 1000000 )
    {
        Counter++;
    }
    return 0;
}
Yandex
Объявления
26.02.2013, 20:05     Остановка второго потока останавливает также первый поток по непонятной причине
Ответ Создать тему
Опции темы

Текущее время: 05:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru