You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows多线程程序:如何依次读输入后并行计算?

解决方案

核心思路

让主线程统一完成所有输入的读取,再将输入数据作为参数传递给各个工作线程。线程启动后直接使用传入的数据执行计算,既避免了多线程争抢终端输入的问题,又能实现计算阶段的并行执行。

修改后的代码示例

#include <windows.h>
#include <cassert>
#include <iostream>

// 定义线程参数结构体,用于传递输入数据
struct ThreadData {
    int input;
    // 可根据需求扩展其他计算参数或结果存储字段
};

DWORD WINAPI F1(LPVOID lpParameter)
{    
    ThreadData* data = static_cast<ThreadData*>(lpParameter);
    // 示例计算逻辑:输入值乘以2
    int result = data->input * 2;
    std::cout << "线程1计算结果:" << result << std::endl;
    
    return 0;
}

DWORD WINAPI F2(LPVOID lpParameter)
{
    ThreadData* data = static_cast<ThreadData*>(lpParameter);
    // 示例计算逻辑:输入值加10
    int result = data->input + 10;
    std::cout << "线程2计算结果:" << result << std::endl;
    
    return 0;
}

const int THREADS_COUNT = 2;

int main()
{
    ThreadData threadData[THREADS_COUNT];
    // 主线程依次读取输入
    std::cout << "请输入线程1的计算数据:";
    std::cin >> threadData[0].input;
    std::cout << "请输入线程2的计算数据:";
    std::cin >> threadData[1].input;

    HANDLE thread_handles[THREADS_COUNT];
    // 创建线程并传递对应的数据
    thread_handles[0] = CreateThread(NULL,
                                     0,
                                     F1,
                                     &threadData[0],
                                     0,
                                     NULL);
    assert(thread_handles[0] != NULL);
    
    thread_handles[1] = CreateThread(NULL,
                                     0,
                                     F2,
                                     &threadData[1],
                                     0,
                                     NULL);
    assert(thread_handles[1] != NULL);
    
    WaitForMultipleObjects(THREADS_COUNT,
                           thread_handles,
                           TRUE,                           
                           INFINITE);
 
    CloseHandle(thread_handles[0]);
    CloseHandle(thread_handles[1]);
    
    return 0;
}

关键说明

  • 参数传递:通过ThreadData结构体封装输入数据,作为参数传递给线程函数,线程内部通过类型转换获取数据,保证数据安全传递。
  • 输入控制:所有输入操作由主线程完成,确保输入顺序完全可控,不会出现多线程同时读取终端的混乱场景。
  • 并行计算:线程启动后直接使用预输入的数据执行计算,两个线程的计算过程并行进行,充分利用多核资源提升效率。

内容的提问来源于stack exchange,提问作者user19130076

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 08:35:24