Operacje na wątkach thread

Operacje na wątkach thread
AD
  • Rejestracja: dni
  • Ostatnio: dni
  • 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?

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
0

Co chcesz zrobić i w jakim celu?

AD
  • Rejestracja: dni
  • Ostatnio: dni
  • 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: dni
  • Ostatnio: dni
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.

AD
  • Rejestracja: dni
  • Ostatnio: dni
  • 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.