#include <iostream> #include <thread> void myFunction() { std::cout << "Hello from thread!" << std::endl; } int main() { std::cout << "main" <<std::endl; while(1) {} std::thread myThread(myFunction); myThread.join(); return 0; }如何让主线程和分线程同事执行
时间: 2024-03-20 16:43:43 浏览: 105
要让主线程和子线程同时执行,可以使用`std::thread`的`detach()`函数,将子线程分离出来,使其成为一个独立的线程,不再与主线程有关联。这样,主线程和子线程就可以并行执行。修改代码如下:
```c++
#include <iostream>
#include <thread>
void myFunction() {
std::cout << "Hello from thread!" << std::endl;
}
int main() {
std::cout << "main" <<std::endl;
std::thread myThread(myFunction);
myThread.detach();
while(1) {}
return 0;
}
```
注意,使用`detach()`函数后,就不能再使用`join()`函数等待子线程结束了,否则会出现运行时错误。因此,在使用`detach()`函数时,需要确保子线程的生命周期不会比主线程短,否则子线程可能会在主线程结束前被强制终止。
相关问题
#include <iostream> #include <thread> void myFunction() { std::cout << "Hello from thread!" << std::endl; } int main() { std::cout << "main" <<std::endl; while(1) {} std::thread myThread(myFunction); myThread.join(); return 0; }神恶魔意思
这段代码创建了一个无限循环的主线程,并在其中创建了一个新的线程。新线程执行的函数是`myFunction`,它会输出一条消息到控制台。由于`myThread`被调用了`join()`,所以主线程会等待新线程执行完毕后才会结束。但是由于主线程中的无限循环,所以新线程永远无法执行。因此,程序会一直运行下去,除非手动终止它。
怎么用std::thread()和std::thread{}去启动线程
使用std::thread()和std::thread{}都可以启动线程,它们的区别在于std::thread()会默认构造一个空线程对象,而std::thread{}会构造一个默认线程对象。在使用时,我们可以将需要执行的函数作为参数传递给std::thread()或std::thread{}构造函数,然后调用start()方法启动线程。例如:
```
#include <iostream>
#include <thread>
void myFunction() {
std::cout << "Hello from thread!" << std::endl;
}
int main() {
std::thread t1(myFunction); // 使用std::thread()启动线程
std::thread t2{myFunction}; // 使用std::thread{}启动线程
t1.join();
t2.join();
return 0;
}
```
在上面的例子中,我们定义了一个名为myFunction()的函数,并将其作为参数传递给std::thread()和std::thread{}构造函数。然后,我们调用join()方法等待线程执行完毕。
阅读全文