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

Поток не сигнализирует событием о своем окончании - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Не могу понять как исправить ошибку http://www.cyberforum.ru/cpp/thread1272081.html
#include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; const int n = 10; class Library
C++ Помогите построить факториал в MFC Помогите построить факториал в MFC. Целый день капаюсь в уроках, но так ничего не вышло Добавлено через 2 часа 59 минут делаю по примеру http://kvodo.ru/visual-c-mfc-osnovnyie-printsipyi-razrabotki.html и останавливась там где код функции ввести. Когда его ввожу и запускаю, кнопка все равно пишет "бла бла бла" а не результат http://www.cyberforum.ru/cpp/thread1271499.html
C++ Как "засунуть" классы в .dll ?
Добрый вечер! У меня имеется классовая иерархия, базовый класс сотрудник, наследники программист, экономист, электронщик и т.п. Сделал базу данных с помощью (vector.h) , и в main заполняю БД, и потом работаю с ней ( вывожу на экран нужные поля, сортирую так, сортирую эдак ). По заданию мне надо "Описание классов реализовать в Classes.dll, непосредственно сам список в Base.dll. Вызовы в...
C++ Информация по Button, Panel, Label, TextBox в VS2010
Среда visual c++ 2010 для работы с графическим интерфейсом. Компоненты среды программирования(свойства,события,методы,пример использования) Button, Panel, Label, TextBox. Заранее спасибо за ответ.
C++ Уничтожение файлов и папок, без возможности восстановления http://www.cyberforum.ru/cpp/thread1269938.html
Здравствуйте! Собственно это моё задание "Написать windows-приложение для гарантированного удаления файлов(каталогов) без возможности восстановления специализированным ПО". Нашла на википедии информацию по алгоритмам уничтожения: Википедия: "Уничтожение данных" 1.Вопрос собственно в реализации: с чего начать. 2.И может есть у кого какая-нибудь ещё полезная литература на эту тему? 3.Так же...
C++ БПФ и сравнение двух генетических последовательностей Надеюсь, что тут мне помогут. Написал БПФ, но теперь даже в голову не приходит, как мне использовать БПФ для сравнения двух ген. последовательностей. Задача такая: нужно найти наибольший участок совпадения двух этих последовательностей. Подайте идею, пожалуйста, объясните, как это сделать. Было бы замечательно, если ответ был бы в виде кода. подробнее

Показать сообщение отдельно
ProgRoman
1 / 1 / 0
Регистрация: 04.12.2010
Сообщений: 65
10.10.2014, 14:47     Поток не сигнализирует событием о своем окончании
Всем привет, нужна помощь задача такая. Есть метод у меня (mnThread) который постоянно поставляет данные, процедура (get_data) эти данные получает. Как только данные получены я устанавливаю событие и по идее должен перейти к другому методу по обработке данных.. Но что-то идёт не так.. максимум попадаю я в метод обработки (process) только один раз, почему пока не понимаю... ниже код
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
static int count_calls = 0;
 
class Test
{
public:
    HANDLE hEvent;
    HANDLE hProc;
    HANDLE hmutx;
    CRITICAL_SECTION cr;
    CRITICAL_SECTION cs;
    //CRITICAL_SECTION cc;
    int a;
    std::string a_str;
 
public:
    Test();
    ~Test();
 
    static void get_data(void* params); 
    static void process(void* params);
};
 
Test::Test()
{
    //InitializeCriticalSection(&cc);
    //EnterCriticalSection(&cc);
 
    a = 0;
    a_str = "";
    DWORD id = 0;
 
    hEvent = CreateEvent(NULL,FALSE,FALSE,NULL);    
 
    //hProc = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)process,this, 0, &id ); ///1
    hProc = (HANDLE)_beginthread(&Test::process,0,this);    
 
    InitializeCriticalSection(&cr);
    InitializeCriticalSection(&cs);
 
    //LeaveCriticalSection(&cc);
 
    std::cout<<"TEST()\n";
}
 
Test::~Test()
{
    //EnterCriticalSection(&cc);
 
    CloseHandle(hEvent);    
 
    hEvent = NULL;  
 
    CloseHandle(hProc);
    hProc = NULL;
    _endthread();
    DeleteCriticalSection(&cr);
    DeleteCriticalSection(&cs);
 
    //LeaveCriticalSection(&cc);
    //DeleteCriticalSection(&cc);
    std::cout<<"~TEST()\n";
}
 
void Test::get_data(void* params)
{
    if(!params){return;}
 
    Test* tm = (Test*)params;
    EnterCriticalSection(&tm->cr);  
    count_calls++;
    tm->a = count_calls;
 
    SetEvent(tm->hEvent);
    LeaveCriticalSection(&tm->cr);
 
    //tm->hProc = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)process,tm, 0, NULL );///2
}
 
void Test::process(void* params)
{
    if(!params){return;}
    Test* tm = (Test*)params;
 
    if(WaitForSingleObject(tm->hEvent,INFINITE)==WAIT_OBJECT_0)
    {
        EnterCriticalSection(&tm->cs);
        int cnt = tm->a;
        char buf[50];
        tm->a_str = "It's call number of " +std::string(itoa(cnt,buf,10));
        std::cout<<tm->a_str<<"\n";     
        LeaveCriticalSection(&tm->cs);
    }
}
 
static void mnThread(void* params)
{
    if(!params){return;}
    Test* tm = (Test*)params;
 
    while(1)
    {/**/
        tm->get_data(&tm);
    }
 
}
 
int main(int argc, char* argv[])
{
    Test ts;        
    mnThread(&ts);
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 08:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru