wielowątkowść - kompilator wycina część kodu

0

Mam niecodzienny problem. Jestem w trakcie pisania bota zarządzającego serwerami. Każdy serwer jest zarządzany w osobnym wątku. Problem pojawia się przy zamykaniu aplikacji, w pętli czekającej na zakończenie działania wątków. Kompilator po prostu wycina pętle czekającą na zamknięcie wątków, przy breakpointach daje mi informacje że ten kod został usunięty przy kompilacji i nigdy się nie wykona.

	while (true) {
		bool continue_while = false;
		
		for (int k = 0; k < control_list->Count; ++k) {

			if (control_list[k]->boot_thread->ThreadState == System::Threading::ThreadState::Running)
			{
				continue_while = true;
				break;
			}

		}
		
		if (!continue_while) {
			break;
		}
		else {
			Thread::Sleep(100);
		}
	}

Dokładnie wycina pętle while, zostaje tylko for i if w forze który nigdy nie jest prawdą (pomimo, że według debuggera powinien być prawdą w niektórych przypadkach) i w teorii sleep się wykonuje w praktyce po wykonaniu się fora od razu wykonanie przeskakuje poza while.
Tak wiem że jest to ten dziwny twór c++/cli, aplikacja ma swoje początki w 5 lat temu i ja jej nie zaczynałem budować. Rozwój przejąłem 2 lata temu i nie opłaca się tego przepisywać na ten moment.
Pytanie brzmi czy jest sposób by zmusić kompilator by jednak ten kod utworzył? Ewentualnie co tu mam źle bo już mówiąc szczerze zgłupiałem.

1

Wywal ten kod. Użyj Join().

https://msdn.microsoft.com/en-us/library/95hbf2ta%28v=vs.110%29.aspx

Coś takiego:

for (int k = 0; k < control_list->Count; ++k)
    control_list[k]->boot_thread->Join();
0

Edit ok dzięki działa :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1