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

Оформить программу через потоки - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Работа с файлами http://www.cyberforum.ru/cpp-beginners/thread104546.html
Программа должна открыть текстовый файл, считать оттуда и вывести на экран например такое: Первая,зил,1 Вторая,камаз,5 Но я чегото до конца не додумаюсь( Кто разбирается подскажите плиз как по грамотному сделать.. int f9() {
C++ Одномерный массив Помогите решить задачу на С++. Используйте одномерный массив для решения следующей задачи. Компания платит своим продавцам на комиссионной основе. Продавцы получают $200 в неделю плюс 9% от их валовой продажи за эту неделю.Например,продавец, валовая продажа которого за неделю составила $5000,получает $200 плюс 9% от $5000, или всего в сумме $650. Напишите программу на С++ (используя массив... http://www.cyberforum.ru/cpp-beginners/thread104544.html
C++ Перегрузка функций
Здравствуйте ! Попробовал выполнить задание, но есть проблемы...Кто может проверит а ошибки... Задание: АДТ - одномерный массив (вектор) вещественных чисел. Дополнительно перегрузить след. операции: "+" - сложение векторов (a+b для всех i); "" - доступ по индексу; "+" - добавить число к вектору (double+vector) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Задание вроде как...
Глупая ошибка в методе Якоби C++
#include <math.h> #include <clocale> #include <stdio.h> #include <conio.h> #define eps 0.001 //желаемая точность #define N 10 int main( void ) { setlocale(LC_ALL, "Russian");
C++ Код на паскале в с++ http://www.cyberforum.ru/cpp-beginners/thread104529.html
Здраствуйте помогите пожалуйста перевести код из паскаля на с++... Program LAB1; uses crt; Procedure WriteByte(a:byte); var i:integer; begin for i:=7 downto 0 do begin if ((a shr i) and $01) <>0 then write('1') else write('0');
C++ C++ и Excel Ребят, кто-нибудь может подсказать: можно ли данные из С++ отправить в Excel? если можно, то каким образом это сделать? подробнее

Показать сообщение отдельно
kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,302
15.03.2010, 21:38     Оформить программу через потоки
OffyGhost,посмотри пожалуйста в чём дело
Я всё сделал вроде правильно, сам поиск неважен щас, может я где-то в деталях ошибся... Создаётся поток, а вот он то ли завершиться не может то ли что, но я там создал типа контрольной точки (там увидишь, я всё прокомментировал), так вот её главный поток проскакивает. Где-то я ошибся, а где не пойму. Спасибо.


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
#include <windows.h>
#include <stdio.h>
 
 
 
int poisk (PVOID pvParam) {
 
 //Если во введённых значпениях будет искомое, этот параметр превратится в true
 pvParam= false;
 
 //ЭТО МАССИВ ДЛЯ ВВОДИМЫХ ЗНАЧЕНИЙ
 int mass [256];
 
 int i, j, chislo;
 j= 0;
 
 //Обнуляем массив для поиска элементов
 for (i= 0; i< 256; i++) {
  mass [256]= 0;
 }
 
 //Заполняем массив введённым изначениями
 //ПО окончании пишем ENTER ^Z ENTER
 printf ("VVedi znachenia cherez probel ");
 while (scanf ("%d", &mass [i++])==1) {}
 
 //Вводим искомое число
 printf ("Vvodi iskomoe chislo ");
 scanf ("%d", &chislo);
 
 //Ищем егг\о в массиве, если находим, соответвтенно изменяем *pvParam 
 for (i-1; i>=0; i--) {
  if (mass [i]== chislo) {
    pvParam= (PVOID)true;
    break;
  }
 }
 
 //Буфер очщаю
 fflush (stdin);
 
 printf ("Eto vot tipa kontrolnoi tochki TUT VSO NORMALNO, NE PROSKSKIVAET!");
 getchar ();
 
 return 0;
}
 
 
 
 
 
 
 
int main () {
 PVOID var;
 DWORD idThread;
 HANDLE h1;
 
 //Здесь надо прописать проверку- солздан поток или нет. Это я опущу
 //ВЫполнил приведение типов согласно прототипу функции, нашёл его где-то в инклудах,
 //Чтобы предупреждений не возникало
 h1 = CreateThread (NULL, (DWORD)NULL, (LPTHREAD_START_ROUTINE)poisk, &var, (DWORD)NULL, &idThread);
 
 
 //Это зачем?
 //Если я правильно понял, основной поток ждёт завершения потока h1 и ТОЛЬКО после этого выводится 
 //значение переменой var. Правильно?
 WaitForSingleObject(h1, INFINITE);
 
 //Даже буфер очистить решил
 fflush (stdin);
 
 //С выводом var я потом разберусь, вот этй контрольнуюочку проскакивает!
 //printf ("%d" , var);
 printf ("KONTROLNAYA TOCHKA\n ");
 getchar ();
 getchar ();
 
 //В конце проги мы закрываем этот поток.
 CloseHandle(h1);
 
 return 0;
 
}
Добавлено через 2 часа 23 минуты
Я рвазобрался, ошибки как в моём коде, так и в коде OffyGhost

Но, поскольку ошибки такого жалкого червя мало кому интересны, начну со второго.
Итак, главная и единстенная ошибка OffyGhost- неправильный прототип функции, а именно: неправильный четвёртый параметр. ЭТот параметр имеет тип PVOID, следовательно, его нужно объявить так:
C++
1
PVOID var
а потом уже
C++
1
CreateThread (NULL, NULL, poisk, var, NULL, &idThread);
Вместо ошибочного
C++
1
CreateThread (NULL, NULL, poisk, &var, NULL, &idThread);
(хотя компилятор хавает, негоже привыкать надеятьсяна авось)

Всё? ОТнюдь! Сюрпризы только начинаются. Эта безупречная, казалось
бы, запись не сработает! И опять из-за проклятой var!
...НО терпение и труд всё перетрут. Посмотрите, какое значение должна иметь
var при передаче в функцию? Правильно, адрес какой-либо переменной (PVOID
говорит нам, что переменной любого типа) Но var не присвоен адрес никакой переменной!
ПОэтому и происходит сбой!

Делаем так:
C++
1
2
3
4
int peremennaya;
PVOID var= &k;
...
h1 = CreateThread (NULL, (DWORD)NULL, (LPTHREAD_START_ROUTINE)poisk, var, (DWORD)NULL, &idThread);
Вот теперь всё ОК!

Ну, а в моём коде ошибка глупая, я прописал память. НЕобходимо писать так:
C++
1
2
 i= 0;
 while (scanf ("%d", &mass [i++])==1) {}
И тоже всё будет ОК. Можете проверить.
ДО новых встреч, друзья!
 
Текущее время: 13:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru