@ElijahVodka

Как исправить Thread для проверки чисел c++/cli?

Есть игра в угадывание числа. При загрузке формы вызывается второй поток - th и задает случайное число, которое пользователь в последующем должен угадать
После нажатия на кнопку второй поток сравнивает введенное число.

Я сделал запуск потока при открытии формы и его приостановка после задания случайного числа, дабы возобновить его когда надо будет проверить число.

Пробовал сбросить поток или приостановить. В любом случае, он либо не останавливается, либо не запускается по новой.

Собственно вопрос: как исправить это и сделать правильно?

код формы
namespace OS1 { 

using namespace System; 
using namespace System::ComponentModel; 
using namespace System::Collections; 
using namespace System::Windows::Forms; 
using namespace System::Data; 
using namespace System::Drawing; 
using namespace Threading; 
//using namespace System::IO; 

/// <summary> 
/// Сводка для MyForm 
/// </summary> 
public ref class MyForm : public System::Windows::Forms::Form 
{ 
public: 
MyForm(void) 
{ 
InitializeComponent(); 
} 

//код формы 

}


#pragma endregion

		int num; // это номер который мы загадали
		int rnd; // это номер который загадали нам
		int st = 0;
		
		Thread^ th = gcnew Thread(gcnew ThreadStart(this, &MyForm::check));
		
		private: System::Void MyForm_Load(System::Object^  sender, System::EventArgs^  e) {
			th->Start();			
		}

		private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {		
			th->Resume();
		}
		void check() {
			this->ChangeText();
		}	
	};
}


следующий код мне подсказали для обращения к форме из th:

delegate void SetVoidDelegate();
private: System::Void ChangeText() {
			if (this->textBox1->InvokeRequired) {
				using namespace System;
				SetVoidDelegate^ d = gcnew SetVoidDelegate(this, &MyForm::ChangeText);
				this->Invoke(d);
			}
			else {
				if (textBox2->Text == String::Empty) {
					using namespace std;
					srand((int)time(0));
					rnd = (rand() % 100) + 1;
					textBox2->Text = "" + rnd;
					th->Suspend();
st=1;
				}
				if (st == 1); {
					num = Convert::ToInt32(textBox1->Text);
					if (num == rnd) {
						textBox1->Text = "exelent";						
						label1->Visible = true;
					}
					else if (num < rnd) textBox1->Text = "more!";
					else if (num > rnd) textBox1->Text = "less!";
				}				
			}
		}
  • Вопрос задан
  • 222 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы