• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

pierwsze kroki z wątkami

Object Storage Arubacloud
+1 głos
824 wizyt
pytanie zadane 19 lipca 2015 w C i C++ przez niezalogowany
void drewno( void * dummy)
{
    for(;;)
    {
        il_sur[0]++;
        Sleep(5000);
    }

}

void glina( void * dummy)
{
    for(;;)
    {
        il_sur[1]++;
        Sleep(5000);
    }

}

void kamien( void * dummy)
{
    for(;;)
    {
        il_sur[2]++;
        Sleep(5000);
    }

}

void zelazo( void * dummy)
{
    for(;;)
    {
        il_sur[3]++;
        Sleep(5000);
    }
}

Czy pętle są w takich sytuacjach dozwolone??

1 odpowiedź

+3 głosów
odpowiedź 19 lipca 2015 przez Dorion300 Szeryf (90,250 p.)
wybrane 19 lipca 2015
 
Najlepsza

W programowaniu jest tak ze wszystkie chwyty są dozwolone ale nie wszystkie chwyty są dobre.

Co to za "gra"?

Ma działać w tle?

Widzę jedną wadę, czyli każdy wątek na jeden surowiec.

To jest bardzo zasobożerne, lepszym pomysłem jest połączenie w jedną funkcję.

void surowce( void * dummy)
{
    for(;;)
    {
        il_sur[0]++;
        il_sur[1]++;
        il_sur[2]++;
        il_sur[3]++;
        Sleep(5000);
    }
}

Wynik jest taki sam a i program o wiele szybciej działa, mniej wątków.

komentarz 19 lipca 2015 przez niezalogowany

W programowaniu jest tak ze wszystkie chwyty dozwolone ale nie wszystkie chwyty są dobre.

 Nie wiedziałem, dziękuję za info. Gra jest w stylu Otchłani lecz rozbudowujesz (na dzień dzisiejszy) wioskę. A wątki potrzebuję żeby surowce się dodawały. Zrobię tak jak mi napisałeś, zrobię wszystko w jednym wątku :D Dzięki wielkie za pomoc. :):)

komentarz 19 lipca 2015 przez niezalogowany

Czy teraz jest lepiej??

void surowce( void * dummy)
{
    for(;;)
    {
        il_sur[0]++;
        il_sur[1]++;
        il_sur[2]++;
        il_sur[3]++;
        Sleep(5000);
    }

}

 

komentarz 19 lipca 2015 przez Dorion300 Szeryf (90,250 p.)

Znacząco.

A tak z ciekawości. czym jest "void * dummy" potrzebny on jest?

Czy planujesz póżniej coś z tym zrobić?

komentarz 19 lipca 2015 przez niezalogowany

"void * dummy"  nie mam bladego pojęcia ale tak pisało w poradniku o wątkach, więc zrobiłem. I będę to rozbudowywać, jeszcze nie wiem jak, ale będę.

komentarz 19 lipca 2015 przez Dorion300 Szeryf (90,250 p.)
A to pozdrawiam i wspaniałego kodzenia.
komentarz 19 lipca 2015 przez niezalogowany
Dziękuję. :)
komentarz 19 lipca 2015 przez Wiciorny Ekspert (270,330 p.)
Czy wynik jest taki sam? Tu bym się zastanawiał, co jeżeli chce dodać tylko 1 surowiec :) ?

A nie wszystkie na raz ?
komentarz 19 lipca 2015 przez Dorion300 Szeryf (90,250 p.)
Zauważ że po odpaleniu tego wątka on nigdy się nie kończy.

Tak samo inne.

Jeśli chce dodać sobie surowiec to po prostu wystarczy zrobic funkcję która przyjmuje określone dane i dodaje określony surowiec.
komentarz 19 lipca 2015 przez niezalogowany
Na razie potrzebuję tylko tyle, w przyszłości będę to rozbudowywał tak jak napisałem
komentarz 19 lipca 2015 przez adrian17 Ekspert (345,160 p.)
Ten void* dummy nie ma sensu, pokaż ten poradnik o wątkach.
komentarz 19 lipca 2015 przez niezalogowany
komentarz 19 lipca 2015 przez niezalogowany

usunąłem void* dummy i nie działa

komentarz 19 lipca 2015 przez adrian17 Ekspert (345,160 p.)
A piszesz w C, czy C++?
komentarz 19 lipca 2015 przez niezalogowany
Całość tworzę w c++
komentarz 19 lipca 2015 przez adrian17 Ekspert (345,160 p.)
edycja 19 lipca 2015 przez adrian17

Dobra, to wiedz że nagłówek process.h pochodzi z czasów DOSa, gdy C dominował a C++ w zasadzie dopiero powstawał. W 2015 użytkownik C++a powinien o takich sposobach zapominać, a nie się ich uczyć - w C++ie nie tylko jest od dawna dostępny bardzo dobry Boost::Thread z biblioteki Boost, ale też od paru lat standardowy std::thread.

Prosty "współczesny" kod z wątkami wyglądałby tak:

#include <iostream>
#include <thread>

using namespace std;
using namespace std::chrono;

void funkcja()
{
	for (int i = 0; i < 100; ++i)
	{
		cout << i << endl;

		this_thread::sleep_for(milliseconds(50));
	}
}

int main()
{

	thread watek(funkcja);

	watek.join();

}

 

komentarz 19 lipca 2015 przez niezalogowany
Czyli ten poradnik jest do dupy?? A tyle osób twierdzi że jest super. :(
komentarz 19 lipca 2015 przez niezalogowany
Nie działa, co mam poradzić
komentarz 19 lipca 2015 przez adrian17 Ekspert (345,160 p.)
Poradnik w 2009 był akceptowalny, bo std::thread jeszcze nie było a nie każdy chciał się bawić z Boostem. Teraz jest przestarzały, a przez to do dupy.

Powiedzieć co nie działa.
komentarz 19 lipca 2015 przez niezalogowany

to nie działa :(

komentarz 19 lipca 2015 przez adrian17 Ekspert (345,160 p.)
Trzeba zrobić to co napisali, czyli w opcjach kompilacji włączyć checkbox -std=c++11.

(niestety jeśli używasz Codeblocksa i tak to nie zadziała, wsparcie tej wersji MinGW dla nowych wątków nie istnieje. Sorry.)
komentarz 19 lipca 2015 przez niezalogowany
To co mam zrobić??
komentarz 19 lipca 2015 przez adrian17 Ekspert (345,160 p.)
Nie wiem. Jak chcesz to czytaj ten stary poradnik. Jak chcesz współcześniej to pobierz VS2013 (lub jutro VS2015). MinGW i Code::Blocksowi się nie śpieszy.
komentarz 19 lipca 2015 przez niezalogowany

MinGW i Code::Blocks są jeszcze wspierane??

komentarz 19 lipca 2015 przez adrian17 Ekspert (345,160 p.)
MinGW (to rozprowadzane z C::B) z tego co wiem jest słabo rozwijane; "konkurencyjne" MinGW-w64 znacznie lepiej sobie radzi, choć z std::thread chyba wciąż jest równie problematycznie. Nie mam pojęcia nad aktywnością projektu C::B, ale nie spodziewam się by kiedykolwiek mieli dogonić Visual Studio.
komentarz 19 lipca 2015 przez niezalogowany
Właśnie ściągam VS2015, mam nadzieję że to rozwiąże problem :)
komentarz 19 lipca 2015 przez niezalogowany
Przeniosłem się na VS2015 i są same problemy. Jak się kompiluje ( to przede wszystkim), cały czas mi błędy się pokazują. Koszmar :( tragedia
komentarz 19 lipca 2015 przez Dorion300 Szeryf (90,250 p.)
Jakie blędy?

Podaj kod źródłowy łącznie z nagłówkami .h

W VS trochę inaczej się buduje programy.

Wszystkie #include trzeba wpisać w "stdafx.h"
komentarz 19 lipca 2015 przez niezalogowany
Nie mieszczę się w 8000 znaków, powiedz mi gdzie mam dać #include "stdafx.h"??
komentarz 19 lipca 2015 przez Dorion300 Szeryf (90,250 p.)

Wpisać W "stdafx.h"

Automatycznie powinieneś mieć includa u góry.

Poszukaj w explorerze plików "stdafx.h" a nastepnie otwórz i dodaj tam wszystkie includy.

Dodawaj na http://wklej.org

komentarz 19 lipca 2015 przez niezalogowany
Dzięki za stronę
 

//main.cpp

http://wklej.org/id/1759655/

//funkcje.h

http://wklej.org/id/1759657/

jeśli chodzi Ci o ten include to ja skopiowałem calość z CB do VS
komentarz 19 lipca 2015 przez adrian17 Ekspert (345,160 p.)

Wszystkie #include trzeba wpisać w "stdafx.h"

stdafx.h jest niepotrzebny, MSVC dodaje go automatycznie (jako opcję "precompiled headers") jeśli wybierze się projekt "console application". Głupie ale nieuniknione. Nie ma go za to po stworzeniu pustego projektu (co polecam wybierać).

Nie pokazałeś błędów. Zawsze mów jakie błędy, nie możemy zgadywać.

(zaraz spróbuję skompilować na swoim)

komentarz 19 lipca 2015 przez niezalogowany

Mój błąd hehe

komentarz 19 lipca 2015 przez adrian17 Ekspert (345,160 p.)
(wrzucaj screenshoty na hostingi które nie pomniejszają obrazków)

Jak mówiłem wyżej, zrób "pusty projekt", nie konsolowy, wtedy znikną błędy związane z stdafx.h.
komentarz 19 lipca 2015 przez niezalogowany
ok, ok, już się biorę do roboty
komentarz 19 lipca 2015 przez adrian17 Ekspert (345,160 p.)
Mi się skompilowało, gdy:

- zamieniłem "funkcja" na "surowce"

- otoczyłem case blokiem (w sensie klamrami {}), inaczej nie można deklarować zmiennych w case

(join() robi co innego, niż myślisz)
komentarz 19 lipca 2015 przez niezalogowany
jak ja nie cierpię VS nic w nim nie ogarniam
komentarz 19 lipca 2015 przez adrian17 Ekspert (345,160 p.)
Ugh, nie wszystko można ogarnąć po 30 minutach...

Proszę, półtorej minuty do działającego programu (ups, przypadkiem nie nagrał się kursor, sorry)

http://puu.sh/j53Dk/b0808c2b45.mp4
komentarz 19 lipca 2015 przez niezalogowany
Teraz to mnie rozłożyłeś na atomy... Boże... Już wszystk rozumiem tylko mam jeszcze jedno pytanie, nie mam tego paska po lewej stronie. Pomożesz??
komentarz 19 lipca 2015 przez adrian17 Ekspert (345,160 p.)
Który pasek? Widzę Solution Explorer u Ciebie. Jeśli ten pionowy jeszcze bardziej po lewej, to tylko dodatkowe schowane zakładki, dodałem na swoje potrzeby. Jeśli te trzy dodatkowe przyciski z lewej na górnym poziomym pasku, to kliknij prawym gdzieś na górnym pasku i kliknij "build", wtedy się pojawią.

A, i możesz ustawić polski język jeśli chcesz: https://forum.pasja-informatyki.pl/?qa=blob&qa_blobid=8663639156480173120
komentarz 19 lipca 2015 przez niezalogowany

Właśnie, jak włączyć Solution Explorer

komentarz 19 lipca 2015 przez adrian17 Ekspert (345,160 p.)
View (trzecie menu) -> Solution Explorer
komentarz 19 lipca 2015 przez niezalogowany
Muszę pogrzebać w VS jak widać
komentarz 19 lipca 2015 przez niezalogowany
Dziękuję wam wszystkim za pomoc, jeśli chcecie to mogę wam przesyłać kolejne wersje mojej gry, problem w tym że przez gmail kiepsko, a na hosting trochę za dużo. Najlepiej na fb.

Podobne pytania

0 głosów
4 odpowiedzi 226 wizyt
pytanie zadane 30 sierpnia 2015 w C i C++ przez niezalogowany
0 głosów
3 odpowiedzi 936 wizyt
pytanie zadane 21 kwietnia 2019 w Java przez poldeeek Mądrala (5,980 p.)
0 głosów
1 odpowiedź 175 wizyt
pytanie zadane 29 grudnia 2018 w Java przez ILikeJava Obywatel (1,230 p.)

92,588 zapytań

141,439 odpowiedzi

319,689 komentarzy

61,974 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...