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

Потоки win api - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Чтение из файла в список http://www.cyberforum.ru/cpp-beginners/thread273602.html
//10.04.11 01:18 /* Name: Copyright: Author: Date: 10.04.11 01:18 Description: */ #include <graphics.h>
C++ Как выгледит С++ Как выглядит С++ Выложите пожалуйста скрины http://www.cyberforum.ru/cpp-beginners/thread273595.html
C++ Прегрузка операторов
Создать класс Set – множество целых чисел, используя динамическую память. Определить операторы работы с множествами: "+" – объединение, "*" – пересечение, "-" вычитание, как методы класса, а "+=" – включение нового элемента в множество, "==" – сравнения на равенство, и др. как дружественные функции. Определить операторы "<<" и ">>". Также определить функцию определения принадлежности элемента...
Выдать на экран второе предложение из текста. C++
Выдать на экран второе предложение из текста. #include "stdafx.h" #include <stdio.h> #include <string.h> #include <conio.h> #include <iostream> #include <locale.h> using namespace std; int _tmain()
C++ матричный калькулятор http://www.cyberforum.ru/cpp-beginners/thread273579.html
очень надо...помогите чем сможете. вот есть проект.. есть ошибочка маленькая помогите кто сможет
C++ Считывание нескольких матриц из файла Зжравствуйте ,помогите с решением такой задачи. Есть файл , в нем хранится матрица.эта матрица считывается в двумерный массив . в массиве эта матрица обрабатывается некоторым алгоримом который определяет удовлетворяет ли матрица некоторым условиям. после чего на экран выводится сообщение удовлетворяет или нет. Программа работает , но мне нужно сделать так, чтобы она работала с несколькими... подробнее

Показать сообщение отдельно
Equive
0 / 0 / 0
Регистрация: 27.02.2011
Сообщений: 11
10.04.2011, 15:50     Потоки win api
Здравствуйте.

Такое задание: необходимо написать программу, которая в главном потоке создает дополнительный поток, и уже в нем производятся вычисления, причем главный поток продолжает обрабатывать пользовательский ввод.
Я что-то написал, но возникает проблема. Например, поток приостанавливается не всегда, и программа не всегда реагирует на пользовательский ввод.
Помогите, пожалуйста, определить что не так. Заранее извиниюсь за некоторую корявость программы, я только учусь =)

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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#include <iostream>  
#include <clocale>
#include <fstream>  
#include <stdio.h>
#include <conio.h>
#include <windows.h>
#include <math.h>
 
using namespace std;
 
const int n=100000;  
int k=0;  
float arr[n];  
float arr1[n];
bool Pause=false;
bool Stop=false;
DWORD code;
HANDLE MainThread;
HANDLE hThread;
DWORD ThreadId;
 
int Num=0;
int Num1=0;
int t;
 
void Sorting (float* array, int left, int right)
{
// функция сортировки   
}
 
ofstream fout("output.txt");
 
DWORD WINAPI Output( LPVOID Param ) 
{ 
    int l=0, r=k-1; 
    Num=0;
    Sorting (arr, l, r);
    for (int i=0; i<k; ++i) 
    {
        fout<<arr[i]<<"   ";
    }
    cout<<"Сортировка завершена";
    return 0;
}
 
int main()
{
MainThread=GetCurrentThread();
setlocale (LC_ALL, "Russian");
 
ifstream fin("data.txt");
if (!fin)
{
    cout<<"Ошибка открытия файла.\n";
    return 1;
}
 
for (int i=0; i<n; ++i)
{
    if (!fin.eof()) 
    {
        fin>>arr[i]; 
        ++k;
    }
    else continue;  
}
 
for (int i=0; i<k; ++i)
{
    arr1[i]=arr[i];
}
 
hThread = CreateThread( NULL, 0, Output, NULL, CREATE_SUSPENDED, &ThreadId );
cout<<"- Для запуска потока сортировки введите 1\n- Для завершения работы потока введите 2\n- Для приостановления работы потока введите 3\n- Для возобновления работы потока введите 4\n";
 
GetExitCodeThread(hThread, &code);
 
while (code==STILL_ACTIVE)
{
    t=getch();
    GetExitCodeThread(hThread, &code);
 
    switch (t)
    {
    case 49: 
        cout<<"\nПоток запущен\n";
        ResumeThread(hThread);
 
        break;
    case 50:
        cout<<"\nРабота потока завершена\n";
        TerminateThread(hThread, STILL_ACTIVE);
        code=0;
        break;
    case 51:
        if (Pause==false)
        {
            cout<<"\nРабота потока приостановлена\n";
            SuspendThread (hThread);
            Pause=true;
        }
        break;
    case 52:
        if (Pause==true)
        {
            cout<<"\nРабота потока возобновлена\n";
            ResumeThread(hThread);
            Pause=false;
        }
        break;
    }
}
 
CloseHandle(hThread);
CloseHandle(MainThread);
 
return 0;
}
Спасибо.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 11:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru