Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Здесь нужно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 08.05.2016, 13:05   #1
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию Будет ли тут аварийное завершение программы ?

Один поток считывал строки, а другой считал буквы и слова

Собственно в потоке fun1 считываю строки, а в потоке fun2 считаю слова.

Будет ли тут аварийное завершение программы ?

И если да, то в каком месте.

___________________________________ __________________________

Код:
#include "stdafx.h"
#include <windows.h>
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
 
using namespace std;
 
vector<string> v;
 
HANDLE hEvent[2];
 
bool flag;
 
int count1 = 0,count2 = 0;
    
int write = 0;
 
DWORD WINAPI fun1(CONST LPVOID lpParam)
{
    string s;
 
    ifstream in;
    in.open((char *)lpParam);
    if (!in) 
    {
        cout<<"error file "<<(char *)lpParam<<endl;
        system("pause");
        flag = false;
        SetEvent(hEvent[0]);
        return 1;
    }
    while (getline(in,s)) 
    {
        v.push_back(s);
        write++;
    }
    in.close();
    flag = false;
    SetEvent(hEvent[0]);
    return 0;
}
 
DWORD WINAPI fun2(CONST LPVOID lpParam)
{
    string temp;
    bool l;
    int read = 0;
    while (flag || (read < write))
    {
        if (read < write)
        {
            temp = v[read];
            l = false;
            for (int i=0;i<temp.size();i++)
            {
                if (temp[i] != ' ')
                {
                    count1++;
                    if (i == temp.size()-1)
                    {
                        count2++;
                        l = false;
                    }
                    else l = true;
                }
                else if (l)
                {
                    count2++;
                    l = false;
                }
            }
            read++;
        }
    }
  SetEvent(hEvent[1]);
 return 0;
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    flag = true;
 
    hEvent[0] = CreateEvent(NULL, FALSE, FALSE, NULL);
    hEvent[1] = CreateEvent(NULL, FALSE, FALSE, NULL);
 
    CreateThread(NULL, 0, fun1, "C:\\Text.txt", 0, 0);
    CreateThread(NULL, 0, fun2, 0, 0, 0);
 
    vector<string> :: iterator it;
 
    
   WaitForMultipleObjects(2,hEvent, TRUE,INFINITE);
  
    cout<<"************************"<<endl<<endl;
    it = v.begin();
    while (it != v.end())
    {
        cout<<*it<<endl;
        cout<<"************************"<<endl<<endl;
        it++;
    }
   
    cout<<"count1 = "<<count1<<" count2 = "<<count2<<endl;
 
    system("pause");
    return 0;
}
RAFA91 вне форума   Ответить с цитированием
Старый 08.05.2016, 14:06   #2
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,941
По умолчанию

Цитата:
Сообщение от RAFA91 Посмотреть сообщение
Один поток считывал строки, а другой считал буквы и слова

Собственно в потоке fun1 считываю строки, а в потоке fun2 считаю слова.

Будет ли тут аварийное завершение программы ?

И если да, то в каком месте.
А нам чё, делать нечего, только вот сидим и ждём, когда-ж нам глупый вопрос зададут?

Давай по-сути. Где, в какой строчке запара? Я такого говнокода, могу 100500 мегабайт накидать. Разбирайтесь, мать вашу!
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума   Ответить с цитированием
Старый 08.05.2016, 14:26   #3
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

Smitt&Wesson Запара в одновременности работы двух потоков с одним вектором.

принцип действия потоков смотри выше.
RAFA91 вне форума   Ответить с цитированием
Старый 08.05.2016, 14:37   #4
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,941
По умолчанию

Цитата:
Сообщение от RAFA91 Посмотреть сообщение
Smitt&Wesson Запара в одновременности работы двух потоков с одним вектором.

принцип действия потоков смотри выше.
Блин, мютексы и семафоры уже отменили? Да. Два потока одновременно работать не могут. Могут, но нужно тогда установить привилегированность одного над другим. В данном случае, операционка "понять не может" какому потоку выделить квант времени. Да это и не предусмотрено. Считается, что программист сам должен об этом заботится.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума   Ответить с цитированием
Старый 08.05.2016, 14:52   #5
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

Цитата:
Сообщение от Smitt&Wesson Посмотреть сообщение
Блин, мютексы и семафоры уже отменили?
странно что про события не напомнили.

одновременно работать могут. но при сотом запуске результат иной.

___________________________________ ______

вроде так ниче. но все-же где-то шумит код. (((((



Код:

#include "stdafx.h"
#include <windows.h>
#include <process.h>
#include <iostream>
#include <fstream>
#include <string>
#include <vector>

 
using namespace std;
 
vector<string> v;

HANDLE hEvent[2],Event;
 
bool flag;

int count1 = 0,count2 = 0;
    
int write = 0;
 
unsigned __stdcall fun1(void *lpParam)
{
    string s;
    
    ifstream in;
    in.open((char *)lpParam);
    if (!in) 
    {
		cout<<"error file "<<(char *)lpParam<<endl;
        system("pause");
        flag = false;
        SetEvent(hEvent[0]);
        return 1;
    }
    while (getline(in,s)) 
    {
		v.push_back(s);
		write++;
		WaitForSingleObject(Event,INFINITE); //ждем
    }
    in.close();
    flag = false;
    SetEvent(hEvent[0]);
	return 0;
}
 
unsigned __stdcall fun2(void *lpParam)
{
	string temp;
	bool l;
	int read = 0;
	while (flag)
    {
		if (read < write)
        {
			temp = v[read];
			SetEvent(Event);
			read++;
			
			l = false;
            for (int i=0;i<temp.size();i++)
            {
                if (temp[i] != ' ')
                {
                    count1++;
                    if (i == temp.size()-1)
                    {
                        count2++;
                        l = false;
                    }
                    else l = true;
                }
                else if (l)
                {
                    count2++;
                    l = false;
                }
            }
		}
    }
  SetEvent(hEvent[1]);
 return 0;
}
 
int main()
{
    flag = true;
   
	Event = CreateEvent(NULL, FALSE, FALSE, NULL); //автосброс
    hEvent[0] = CreateEvent(NULL, FALSE, FALSE, NULL); //автосброс
    hEvent[1] = CreateEvent(NULL, FALSE, FALSE, NULL); //автосброс
 
    _beginthreadex(NULL, 0, fun1, "C:\\Text.txt", 0, 0);
    _beginthreadex(NULL, 0, fun2, 0, 0, 0);
 
    vector<string> :: iterator it;
 
    
   WaitForMultipleObjects(2,hEvent, TRUE,INFINITE);
  
    cout<<"************************"<<endl<<endl;
    it = v.begin();
    while (it != v.end())
    {
        cout<<*it<<endl;
        cout<<"************************"<<endl<<endl;
        it++;
    }
   
    cout<<"count1 = "<<count1<<" count2 = "<<count2<<endl;
 
    system("pause");
    return 0;
}

Последний раз редактировалось RAFA91; 08.05.2016 в 15:35.
RAFA91 вне форума   Ответить с цитированием
Старый 08.05.2016, 16:23   #6
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,941
По умолчанию

Студия, дрянь ещё та. Читай первый дамп с нуля и по 255. Она, гадина, перенаправляет как вздумается "мягкомелким". Там можно такое найти, волосы дыбом встанут и не только на голове. Прадон. Мягче сказать не смогу .

Код:
#include "stdafx.h"
, вообще ни в какую задницу не лезет кроме как в студиии. Уже года три пытаюсь понять, на кой хрени они это сделали? Чё, делать нечего?
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 08.05.2016 в 16:30.
Smitt&Wesson вне форума   Ответить с цитированием
Старый 08.05.2016, 16:34   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,003
По умолчанию

3 ивента на один общий ресурс?


достаточно одного, с минимизацией лока оного.

Смит, хватит пороть чушь.
и если не хватило сил разобрать с PCH, то отключите.(кстати GCC тож умеет, тока там вкл надо наоборот)

насчет 0-255 это адреса?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума   Ответить с цитированием
Старый 08.05.2016, 16:36   #8
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

Цитата:
Сообщение от Smitt&Wesson Посмотреть сообщение
Студия, дрянь ещё та. ?
выпей лучше водочки, раз путевого сказать не можешь

а события да - вещь , что нельзя сказать о критических секциях.
RAFA91 вне форума   Ответить с цитированием
Старый 08.05.2016, 16:41   #9
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,003
По умолчанию

Цитата:
Сообщение от RAFA91 Посмотреть сообщение
выпей лучше водочки, раз путевого сказать не можешь

а события да - вещь , что нельзя сказать о критических секциях.
и чем же крит секция плоха?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума   Ответить с цитированием
Старый 08.05.2016, 16:45   #10
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,048
По умолчанию

Цитата:
а события да - вещь , что нельзя сказать о критических секциях.
пицца да - вещь, что нельзя сказать о молоке... а еще можно о теплом и мягком поговорить...

Цитата:
вообще ни в какую задницу не лезет кроме как в студиии
В других понимается как обычный инклуд, в чем проблема? Вам hdrstop не хватает?
Запомните раз и навсегда: помочь != "решите за меня"!
p51x на форуме   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
странное завершение программы SAMOUCHKA Qt и кроссплатформенное программирование С/С++ 2 27.11.2015 23:22
bass.dll аварийное завершение загрузки музыки из сети Mr_F Мультимедиа в Delphi 5 16.08.2013 19:45
Завершение программы! skidline Помощь студентам 0 10.03.2013 19:28
Завершение программы. DIMA1605 Паскаль, Turbo Pascal, PascalABC.NET 2 09.07.2012 12:21
Завершение программы Michael Gepard C# (си шарп) 1 20.02.2012 05:02


19:57.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.