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

pierwsze kroki z wątkami

+1 głos
2,240 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 (283,500 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 Mentor (355,240 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 Mentor (355,240 p.)
A piszesz w C, czy C++?
komentarz 19 lipca 2015 przez niezalogowany
Całość tworzę w c++
komentarz 19 lipca 2015 przez adrian17 Mentor (355,240 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 Mentor (355,240 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 Mentor (355,240 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 Mentor (355,240 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 Mentor (355,240 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 Mentor (355,240 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 Mentor (355,240 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 Mentor (355,240 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 Mentor (355,240 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 Mentor (355,240 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 Mentor (355,240 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 787 wizyt
pytanie zadane 30 sierpnia 2015 w C i C++ przez niezalogowany
0 głosów
3 odpowiedzi 1,556 wizyt
pytanie zadane 21 kwietnia 2019 w Java przez poldeeek Mądrala (5,980 p.)
0 głosów
1 odpowiedź 385 wizyt
pytanie zadane 29 grudnia 2018 w Java przez ILikeJava Obywatel (1,230 p.)

93,775 zapytań

142,731 odpowiedzi

323,383 komentarzy

63,379 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...