【发布时间】:2015-12-09 22:05:27
【问题描述】:
我正在为具有非常快的线速度的工业机器编写我的第一个线程应用程序。我将 MFC 用于 UI,一旦用户按下“开始”机器按钮,我需要同时执行三个操作。我需要非常快速地收集数据、处理数据并输出结果,并检查用户是否已将机器“关闭”。当我说得很快时,我希望执行的分析部分花费的时间最长,并且需要在一秒钟内完成。我最关心的是与线程相关的开销消除。实现以下循环的最快方法是什么:
void Scanner(CString& m_StartStop) {
std::thread Collect(CollectData);
while (m_StartStop == "Start") {
Collect.join();
std::thread Analyze(AnalyzeData);
std::thread Collect(CollectData);
Analyze.join();
std::thread Send(SendData);
Send.join();
}
}
我意识到这个示例可能有点离题,但希望它能够理解这一点。我应该创建三个线程并暂停它们而不是一遍又一遍地创建和加入它们吗?此外,我有点不清楚 UI 是否需要自己的线程,因为用户需要能够随时暂停或停止线路。
如果有人想知道为什么需要线程而不是顺序,答案是机器的线速度将导致需要在分析第一部分时收集第二部分的数据。每 1 秒相当于这台机器向下移动 3 英尺的线性零件。
【问题讨论】:
-
所有 UI 操作必须在同一个线程中进行,Windows 未设置为以任何其他方式工作。并且任何复杂的数据结构,即使是像 CString 这样简单的数据结构,也需要防止线程之间同时访问。
-
我明白,我想我真正要问的是 UI 是父线程还是只是另一个子线程。
-
MFC 将假定它是从父线程运行的,为了避免麻烦,坚持这样做是最安全的。
-
有道理。谢谢!
标签: c++ multithreading mfc