![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() ![]() |
![]() |
Andrewshkovskii |
![]()
Сообщение
#1
|
Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 222 Пол: Мужской Реальное имя: Andrew Репутация: ![]() ![]() ![]() |
Сдается мне, где-то я с потоками ввода/вывода напортачил, переполняются они что-ли?В чем может быть проблема?На кол-во комментариев не обращайте внимания, пишу для друга почти не знакомого с c/c++.. Забыл добавить, что для теста необходимо запускать через cmd, указывая при запуске пути к текстовому файлу, содержащему текст без знаков препинания, в общем слова разделенные между собой пробелами. Сообщение отредактировано: Andrewshkovskii - 3.01.2009 13:28 |
Andrewshkovskii |
![]()
Сообщение
#2
|
Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 222 Пол: Мужской Реальное имя: Andrew Репутация: ![]() ![]() ![]() |
В общем он файл-то даже и не создает...непонимат.
|
volvo |
![]()
Сообщение
#3
|
Гость ![]() |
Цитата Не создает файл и не выводит ничего из потока. Неправда... Параметры - t1.txt, t2.txt, t3.txt, каждый содержит произвольный английский текст. Имя файла создается так:char s[3] = {0};, в Code::Blocks itoa не присутствует... Запускаю программу. Файл "Результат3.txt" создан, только содержит не 100 самых длинных слов, поскольку надо немного по-другому сортировать, чтобы было именно 100 самых длинных: sort(ArrayOfWords.begin(), ArrayOfWords.end(), ForCompanation); // сортировка по длине словаНу, и что-то намудрено у тебя с крит. секциями, обрабатывается только первый файл, остальные потоки не получают доступа в КС, и не обрабатываются... Но с потоками нет никакой проблемы, все нормально... Проверяй код. Чуть позже посмотрю более внимательно... |
Andrewshkovskii |
![]()
Сообщение
#4
|
Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 222 Пол: Мужской Реальное имя: Andrew Репутация: ![]() ![]() ![]() |
Да насчет сортировки это я вчера увидел, но забыл тут исправить. Не знаю, у меня вообще файл не создается и из потока либо не выводит, либо выводит будто после завершения родительского потока..чушь какая-то
|
Andrewshkovskii |
![]()
Сообщение
#5
|
Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 222 Пол: Мужской Реальное имя: Andrew Репутация: ![]() ![]() ![]() |
Программа, видимо, не ждет потоки, ибо :
И выводит сообщения о времени обработки. Хотя должна ждать завершения созданных потоков... |
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
А создаются потоки у тебя? Ты проверял? Вот так, например:
for (int i = 1; i <= argc - 1; i++)//цикл от 1 до кол-ва указанных файловФайл-результат нормально создается? Переоткрывается нормально? У меня была проблема с его созданием, пока не перешел на Юникодные символы в имени, или на кириллицу (лучше - второе... Надежнее). |
Andrewshkovskii |
![]()
Сообщение
#7
|
Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 222 Пол: Мужской Реальное имя: Andrew Репутация: ![]() ![]() ![]() |
Вот дело в том, что в однопоточной программе с тем же алгоритмом файл создается.а в многопоточной - нет, даже из потока информацию не выводит ничего.
Добавлено через 2 мин. сделал вот так вот : for (int i = 1; i <= argc - 1; i++)//цикл от 1 до кол-ва указанных файлов Код C:\storage\programming\workspace\dB\Debug>db C:\1\1.txt C:\1\2\.txt # 1 ID 976 HANDLE 0x7dc# 2 ID 964 HANDLE 0x7d8 Vremya obrabotki : 0 ms C:\storage\programming\workspace\dB\Debug> вывод на лицо. не понятно..файл опять не создается... |
volvo |
![]()
Сообщение
#8
|
Гость ![]() |
Значит, ставь вывод информации в каждой строке функции потока, и проверяй, куда выполнение доходит, а куда - нет... После каждой функции опять же проверяй код возврата (GetLastError, если это WinAPI, если нет - то в STL тоже есть возможность проверить, как завершился вызов функции, удачно или нет). Где-то у тебя что-то сбивается, и из-за ошибки выполнение функции потока прекращается.
|
Andrewshkovskii |
![]()
Сообщение
#9
|
Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 222 Пол: Мужской Реальное имя: Andrew Репутация: ![]() ![]() ![]() |
Я писал где сбивается, в самом первом посте, в листинге, после парсинга строки на слова тупить начинает.
Результат.... : Код C:\storage\programming\workspace\dB\Debug>db C:\1\1.txt Vremya obrabotki : 0 ms C:\storage\programming\workspace\dB\Debug>db C:\1\1.txt Vremya obrabotki : Before 0 ms C:\storage\programming\workspace\dB\Debug>db C:\1\1.txt Vremya obrabotki : 0 ms C:\storage\programming\workspace\dB\Debug>db C:\1\1.txt Vremya obrabotki : 0 ms C:\storage\programming\workspace\dB\Debug>db C:\1\1.txt Vremya obrabotki : 0 ms Before C:\storage\programming\workspace\dB\Debug>db C:\1\1.txt Vremya obrabotki : 0 ms C:\storage\programming\workspace\dB\Debug>db C:\1\1.txt Vremya obrabotki : 0 ms Before C:\storage\programming\workspace\dB\Debug> Добавлено через 4 мин. Плюс меня волнует то, что у тебя, Volvo, программа-то работает корректно(хотя бы создает рез. файлы), а у меня... Плюс ещё, поставил в цикле обработки вывод строки buffer... for (size_t i = 0; i < dcount + 1; i++)//цикл чтения слов из целой строки а результат .. : Код C:\storage\programming\workspace\dB\Debug>db C:\1\1.txt BeforeVremya obrabotki : Buffer stringIf 0 ms Buffer stringyou C:\storage\programming\workspace\dB\Debug>db C:\1\1.txt Vremya obrabotki : 0 ms Before C:\storage\programming\workspace\dB\Debug>db C:\1\1.txt Vremya obrabotki : 0 ms Before Видимо что-то не так с обработкой..Но я никак не могу понять почему.. если создается один поток всего, для 1го файла, и он его должен обрабатывать..ведь все прекрасно работает в однопоточной программе, а функция потока таже самая, просто вызывается последовательно, если файлов >1.. Добавлено через 5 мин. О, а если убрать вывод сообщения о прошедшем времени, то вообще перестает что либо выводить... |
volvo |
![]()
Сообщение
#10
|
Гость ![]() |
Так... Более детальное рассмотрение твоего кода выявило еще один недочет: у тебя WaitForMultipleObjects ждет чего? Ты нулевой поток создавал вообще, чтоб ждать его завершения?
![]() string rezfilename = "result";У меня этот код прекрасно отрабатывает все 3 (я делал для трех) файлов... |
![]() ![]() |
![]() |
Текстовая версия | 21.06.2025 5:51 |