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

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

Войти
Регистрация
Восстановить пароль
 
Tolias28
205 / 120 / 2
Регистрация: 18.08.2010
Сообщений: 1,011
#1

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

26.02.2013, 19:51. Просмотров 360. Ответов 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;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.02.2013, 19:51
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Остановка второго потока останавливает также первый поток по непонятной причине (C++):

Остановка рабочей функции потока - C++
День добрый. Задумался над таким вот вопросом. Допустим, у меня есть две функции get(StopObj obj) и process(StopObj obj). Эти две функции...

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

Выходной поток первого числа, второго , суммы первого и второго чисел - C++
Здравствуйте! Помогите пожалуйста написать программу, которая через стандартный входной поток принимает текстовые строки, в каждой из...

Клиент-сервер: Если запустить первый поток то он работает, при запуске второго потока выходит ошибка - C++ Linux
Здравствуйте, пытаюсь разбить код на два потока. 1) Поток прием клиентов. void login_server() { struct sockaddr_in saddr; ...

BSOD по непонятной причине - BSOD
Начал проявляться - сегодня, первый раз - во время игры в Crusader Kings 2, потом - постоянно. Предположений, отчего это происходило,...

Исключение по непонятной причине - C#
Программа делает скриншот.. в течении нескольких минут всё работает, но потом вылетает исключение на строчке: IntPtr lnDst1 =...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Tolias28
205 / 120 / 2
Регистрация: 18.08.2010
Сообщений: 1,011
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;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.02.2013, 20:05
Привет! Вот еще темы с ответами:

Креш приложения по непонятной причине! - C++ Qt
Всем привет! Нужно скачать файл с фтп сервера и в прогрессбаре отобразить скачку. Код: при клике по кнопке должна стартовать...

Что-то греется, по непонятной причине - Материнские платы
Пощёл к брату почистить радиатор - проца, почистил, собрал(радиатор снимал с проца), сначала работал по 10 сек, потом вырубался, дал дольше...

BSOD по непонятной мне причине - BSOD
Добрый день. Прошу помощи, чтобы разобраться, по какой причине вылетает синий экран. Уже намучился с ним, не знаю что делать. В общем,...

.NET 4.x По непонятной причине виснет программа - C#
Пишу небольшой GUI для HLDS Update Tool. Но при запуске программы она зависает, неизвестно где, и неизвестно как. Зависает она после вызова...


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

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

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