线程-C++ thread的detach函数问题??

问题描述

C++ thread的detach函数问题??
#include<iostream>
#include<thread>
using namespace std;
void function_1()
{
    std::cout << "Hello,world!" << std::endl;
}
int main() {
    std::thread t1(function_1);        //t1  starts  running.
    //t1.join();   //main thread waits for t1 finish .等待子线程my_thread执行完之后,主线程才可以继续执行下,此时主线程会释放掉执行完后的子线程资源。
    t1.detach();
    system("pause");
    return 0;
}
```但是执行结果还是会把“Hello,world! ”输出,这是程序哪里出了问题??

解决方案

system("pause");从字面上看好像是让当前程序暂停,但是实际上这个只是调用了一个pause的命令,并且不会让程序暂停。

解决方案二:

哇,请问一下,这个是c++那一个版本的标准函数,我 还不知道能这样写的
c++11还是后序版本?

解决方案三:

可以不写system("pause")
你所说的退出原因是你调试了程序,即F5
如果直接运行,即不调试 ctrl+f5 就不会退出了~

解决方案四:

您应该再仔细想一想 什么叫多线程~ 然后再搞清楚 detach和join的区别

解决方案五:

肯定会输出的,首先你在主程序中启动了一个线程t1,现在程序中存在两个线程一个主线程,一个t1线程;当你调用detach()主线程与t1线程分离,这样他们成为了两个独立的线程遵循cpu的时间片调度分配策略,system("pause")会使主线程暂停,而t1线程肯定还会运行;

解决方案六:

c++ thread detach
pthread_detach()函数
pthread_detach()函数

解决方案七:

detach是让线程独立 跟主线程脱离 这样主线程走到pause 而子线程就自己输出字符串等

时间: 2024-12-28 19:32:35

线程-C++ thread的detach函数问题??的相关文章

java并发编程学习: 守护线程(Daemon Thread)

在正式理解这个概念前,先把 守护线程 与 守护进程 这二个极其相似的说法区分开,守护进程通常是为了防止某些应用因各种意外原因退出,而在后台独立运行的系统服务或应用程序. 比如:我们开发了一个邮件发送程序,一直不停的监视队列池,发现有待发送的邮件,就将其发送出去.如果这个程序挂了(或被人误操作关了),邮件就不发出去了,为了防止这种情况,再开发一个类似windows 系统服务的应用,常驻后台,监制这个邮件发送程序是否在运行,如果没运行,则自动将其启动.   而我们今天说的java中的守护线程(Dae

MFC线程计算可以不从函数的开始的位置,而从指定的行号开始执行么

问题描述 MFC线程计算可以不从函数的开始的位置,而从指定的行号开始执行么 MFC线程计算可以不从函数的开始的位置,而从指定的行号开始执行么,怎么根据行号来执行函数? 解决方案 给需要用到的行加上标号,自己编号,在程序开头判断,用goto跳转执行

认识C#线程类Thread

.NET 基础类库的System.Threading命名空间提供了大量的类和接口支持多线程.这个命名空间有很多的类.System.Threading.Thread类是创建并控制线程,设置其优先级并获取其状态最为常用的类.他有很多的方法,在这里我们将就比较常用和重要的方法做一下介绍: Thread.Start():启动线程的执行: Thread.Suspend():挂起线程,或者如果线程已挂起,则不起作用: Thread.Resume():继续已挂起的线程: Thread.Interrupt():

代码-android线程休眠(Thread.sleep)的问题

问题描述 android线程休眠(Thread.sleep)的问题 我有这么一段代码,照理说运行结果应该是refreshTAG2变成"刷新成功",Logcat输出"刷新成功",然后进程休眠 但是执行的结果却是logcat输出"刷新成功",然后进程休眠0.5秒,最后refreshTAG2变成"刷新成功" 搞了好久找不到问题所在,有谁能教教我,谢谢 解决方案 你这不是异步吧,还是主线程中的操作啊sleep一样会阻塞,知道休眠完毕,

关于线程内创建socket create函数返回空的情况。。。。

问题描述 关于线程内创建socket create函数返回空的情况.... 解决方案 你只是new了一个CSocket,m_hSocket有值了,但是没有看到你代码里有create的调用,create创建的代码写在哪里?

请问MFC跨线程能不能调用对方线程里正在运行的函数?

问题描述 请问MFC跨线程能不能调用对方线程里正在运行的函数? 请问MFC跨线程能不能调用对方线程里正在运行的函数?怎么得到当前正在运行的线程运行的是哪一个函数的函数名?谢谢 解决方案 可以让每个线程在执行自己的时候先将函数名放在全局变量中,这样可以通过别的线程进行检索. 解决方案二: 如何在c语言中调用一个函数,使其运行在NSRunLoop的线程中一个函数能否被两个线程同时调用

线程-java Thread wait 问题

问题描述 java Thread wait 问题 3C 执行下面代码 public class TestMain { public static void main(String[] args) { new Thread(new Runnable() { private Object obj = new Object(); @Override public void run() { while(true){ System.out.println(""rr""); t

Attach()函数和Detach()函数的作用

基本就是把一个句柄绑定和解绑定于一个类对象上,是其可以使用MFC的函数而不是API 首先,你要明白Windows对象和MFC对象的区别.MFC对象实际上并没有把整个Windows对象都包装在其中,它只是有一个窗口句柄而已,这个窗口句柄如果指向一个实际存在的窗口对象(窗口对象,也就是WNDCLASS,是一个Windows对象),那么这个MFC对象就是有效的,否则这个MFC对象是空的.如果你还不明白,请回忆一下,当我们使用MFC创建一个窗口时,是分两步进行的,第一步,new一个CWnd对象,这一步是

MFC Attach()函数和Detach()函数

一.Windows对象和MFC对象的区别?MFC对象实际上并没有把整个Windows对象都包装在其中.对于窗口:MFC对象它只是有一个窗口句柄而已,这个窗口句柄如果指向一个实际存在的窗口对象(窗口对象,也就是WNDCLASS,是一个Windows对象),那么这个MFC对象就是有效的,否则这个MFC对象是空的.如果你还不明白,请回忆一下,当我们使用MFC创建一个窗口时,是分两步进行的:第一步,new一个CWnd对象,这一步是创建MFC对象,但是其中的HWND还是非法的,因为对应的Windows对象