Operacje na wątkach thread

Operacje na wątkach thread
AD
  • Rejestracja:około 18 lat
  • Ostatnio:6 miesięcy
  • Postów:206
0

Witam

Dziś mam kolejne pytanie.

Korzystam z

Kopiuj
 #include <thread> 

tworzę sobie funkcje

Kopiuj
void watek(int a)
{
while(1)
   {
       cout<<a;
   }
}

następnie wywołuję ją:

Kopiuj
thread first(watek, 20);

w między czasie w programie zaczynam sobie coś robić ...

znalazłem coś takiego jak sleep_for, pytanie jak odnieść to do konkretnego wątka?

edytowany 1x, ostatnio: adydan
Patryk27
Moderator
  • Rejestracja:prawie 18 lat
  • Ostatnio:prawie 2 lata
  • Lokalizacja:Wrocław
  • Postów:13042
0

Co chcesz zrobić i w jakim celu?


edytowany 1x, ostatnio: Patryk27
AD
  • Rejestracja:około 18 lat
  • Ostatnio:6 miesięcy
  • Postów:206
0

Chodzi o to że mam w tle funkcję, która kopiuje pliki i robi to strumieniem po kawałku, od czasu do czasu chcę otworzyć, któryś z plików wówczas muszę przerwać jej działanie. Kopiowanie jest w wątku a wszelkie inne operacje w klasycznym liniowym main().

several
  • Rejestracja:prawie 16 lat
  • Ostatnio:2 minuty
0

Najprościej byłoby upewnić się, że wątek skończył już pracę, czyli wywołać join na obiekcie skorelowanym z Twoim wątkiem kopiującym.

Takie czekanie jest mało optymalne przy kopiowaniu dużej ilości plików, dlatego koszerniej byłoby przed rozpoczęciem pracy zrobić listę plików i skorelować każdy z jakimś semaforem. Wątek kopiujący ustawiłby odpowiednio semafor skojarzony z konkretnym plikiem dając znać wątkowi głównemu, że plik jest kopiowany, wtedy wątek główny musi poczekać na koniec kopiowania bądź zająć się czymś innym. Wątek główny przy otwieraniu pliku również ustawiłby odpowiednio semafor, żeby wątek kopiujący pominął skojarzony z nim plik i wrócił do niego później.


edytowany 1x, ostatnio: several
AD
  • Rejestracja:około 18 lat
  • Ostatnio:6 miesięcy
  • Postów:206
0

Dzięki bardzo, nie rozwiązałem tego klasycznym semaforem ale po przestudiowaniu opcji wątków doszedłem do wniosku, że rozwiązanie z bool-em (jako semaforem) będzie najlepsze. Kopiuje plik trzymam flagę, kończę zdejmuję flagę i inne elementy mogą się do niego dobierać.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.