C++如何多线程处理
有没有简单点的多线程介绍以及如何多线程工作. c++不是不支持多线程的吗?我也是小白,也{:10_269:}想问一下 本帖最后由 Croper 于 2019-7-19 15:03 编辑。。首先,c++是支持多线程的。。
第二,这玩意讲起来一堆一堆的,我都不知道从哪儿开始,况且我也掌握得不深。。
先说一个最简单的吧,stdlib是自带thread的。使用thread,能简单地创建一个线程#include<iostream>
#include<thread>
using namespace std;
void HelloFishC() {
cout << "Hello FishC!" << endl;
}
int main() {
thread thr(HelloFishC);
thr.join(); //等待线程执行完毕,在函数完结前,需要使用join()等待线程结束或detach()分离线程
system("pause");
}
上面的代码就是创建一个新线程然后让它打印出hello fishc 本帖最后由 Croper 于 2019-7-19 15:01 编辑
在比如,在进行一个耗时较长的运算时(比如从1加到1000000000),会耗时很长的时间,这个时候,可以利用thread给它加一个进度条
#include<iostream>
#include<thread>
#include<mutex>
#include<windows.h>
using namespace std;
mutex m_cursor; //移动光标再打印时最好加个锁,否则可能出现进程A移动光标->进程B移动光标->进程A打印->进程B打印导致的排版混乱
//移动控制台光标的函数
void gotoxy(int x, int y) {
COORD coord = { x,y };
HANDLE hscr = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hscr, coord);
}
//绘制进度条的函数
void PrintProcess(volatile int* pnum, int den) {
volatile int& num = *pnum;
m_cursor.lock();
gotoxy(0, 1);
cout << "计算中..";
gotoxy(0, 3);
for (int i = 0; i < 100; ++i) {
cout << "-";
}
m_cursor.unlock();
for (int i = 0; i < 100; ++i) {
while ((double)num / den * 100 < i) {
Sleep(10);
}
m_cursor.lock();
gotoxy(i, 3);
cout << "|";
m_cursor.unlock();
}
}
int main() {
long long sum = 0;
volatile int i; //使用volatile告诉编辑器不要优化,否则可能出现进程间的数据不一致
int maxi = 1000000000;
thread thr(PrintProcess, &i, maxi);//注意向函数传递参数的方法,不能直接传递引用
for (i = 0; i < maxi; ++i) {
sum += i;
}
thr.join();
m_cursor.lock();
gotoxy(0, 1);
cout << "计算完毕,答案是" << sum;
gotoxy(0, 5);
m_cursor.unlock();
system("pause");
} 本帖最后由 Croper 于 2019-7-19 15:15 编辑
leetcode最近也上线了几道多线程的题目,有兴趣可以去试试https://leetcode-cn.com/problemset/concurrency/
嗯,兔子.jpg没有问题 Croper 发表于 2019-7-19 14:47
在比如,在进行一个耗时较长的运算时(比如从1加到1000000000),会耗时很长的时间,这个时候,可以利用thr ...
令人头痛 所以你到底是哪里看不懂呢,哪里弄不懂直接提出来,你这样让我怎么回答啊?
如果问多线程我肯定是默认c++的基础已经学得差不多了啊,
你不需要管gotoxy是如何实现的,剩下这些代码涉及的就只有thread和mutex里最基础的几个东西了。
页:
[1]