按钮不起作用
buttons do not function
我是 c++ windows 表单编程的新手。我设计了一个具有 5 个按钮和 5 个图形的窗口窗体。当按下任何屁股时,在相应的图形中绘制 100 个随机值。一切都运行良好,除非绘制值时没有其他按钮工作。我创建了一个 for 循环,它循环 100 次并在特定图中绘制随机生成的值。但是,当绘制一个图形时,没有其他按钮工作。我实际上想创建一个开始和停止按钮,以便当按下开始对接时,绘图开始,当按下停止时,绘图停止。提前谢谢。
按钮的代码如下
private: System::Void btn1_Click(System::Object^ sender, System::EventArgs^ e) {
for (z = 0; z < 100; z++)
{
y = rand() % 8 + 1;
x = rangeMax;
//plot data
gp1->PlotXY(x, y, 0);
//display lable
dis1->Text = Convert::ToString(y);
dis1->Update();
ctr++;
Sleep(1);
if (ctr == 1)
{
rangeMin = rangeMin + 0.2;
rangeMax = rangeMax + 0.2;
gp1->SetRange(rangeMin, rangeMax, 0, 10);
gp1->XGridNumber::set(100);
gp1->YGridNumber::set(10);
ctr = 0;
}
gp1->Update();
}
当您单击该按钮时,您的代码将进入这段代码,并且在完成之前不会退出。因此,它无法处理其他按钮上的单击。解决问题可能相当棘手,所以我不会在这里详细介绍,我会尽力帮助您找到自己解决问题的方法。
有两种方法可以做到这一点(还有更多,但我会谈谈这 2 种):
- 多线程;
- 队列;
多线程:这个想法是为您的代码同时位于多个位置创造可能性。此函数不会在按钮函数中执行所有操作,而是只会启动一个将完成艰苦工作的新线程。这可能会产生问题,因为您将不得不担心同步,死锁和混乱的东西。
队列:可能更容易实现这种多线程。它背后的想法是将您需要计算和绘制点的信息推送到某个变量(堆栈是合适的)。这将是一个快速的操作,您的程序将能够快速退出按钮功能。之后,在您的主循环中,您将必须实现一些处理您保存到堆栈变量的信息的东西。只是要小心不要犯同样的错误,并尝试同时处理它。我建议您逐点处理,当且仅当自处理最后一个点以来已经过去了一秒钟。这样,您将获得与现在相同的行为,但不会卡住。
这是因为您只有一个线程来处理这些按钮。如果你的线程开始运行你在这里得到的这个循环,那么这个线程在完成之前不能做任何其他事情。
您在这里有几个选择。优化此代码,看看您是否真的需要所有这些代码(只有您才能知道)。另一种选择是实现多线程来处理这些功能。但这需要大量的工作才能使其正常工作。请记住,只有一个线程可以处理 UI,因此您可以创建一个工作线程来计算值等。看看这个http://www.codeproject.com/Articles/540912/Cplusplus-Threads-Make-your-multitasking-life-e
- 我的神经网络不起作用 [XOR 问题]
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- C++为什么尽管我调用了void函数,它却不起作用
- 为什么在保护模式下继承升级不起作用
- 循环在计数器中不起作用
- 在其他文件中创建类时在 c++ 项目中不起作用
- Visual studio代码重构似乎不起作用(例如,重命名符号-f2)
- 为什么二进制搜索在我的测试中不起作用
- 我的代码中有错误吗?使用BGI图形的C++代码对我不起作用
- 按钮悬停在 QT 中垂直布局的选项卡小部件中不起作用
- 为什么我的 arduino 按钮在 0 和 1 以外的端口上不起作用?
- 点击回车按钮后不起作用
- QT连接到按钮不起作用
- 确定按钮在QDialog上不起作用
- 通过按钮使用堆叠小部件更改页面不起作用
- 按钮不起作用
- Gtkmm scroll_event在按下按钮时不起作用
- 如果通过单击任务栏按钮最小化程序,SW_SHOWNOACTIVATE不起作用
- 使用Qt设计器的Qt按钮事件不起作用:"No such slot QApplication"