_beginthead函数创建线程

//---------------------------------------------------------------------------
#include <vcl.h>
#include <stdio.h>
#include <errno.h>
#include <stddef.h>     /* _threadid variable */
#include <process.h>    /* _beginthread, _endthread */
#include <time.h>       /* time, _ctime */
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused

//线程回调函数
void thread_code(void *threadno)
{
    time_t t;

    time(&t);
    printf("线程回调函数==>线程创建序号:%d,线程ID:%d, 创建时间:%s\n",
        (int)threadno, _threadid, ctime(&t));
    //_endthread();//此函数会被自动调用。
}

void start_thread(int i)
{
    int thread_id;//返回句柄

    #if     defined(__WIN32__)
    if ((thread_id = _beginthread(thread_code,4096,(void *)i)) == (unsigned long)-1)
    #else
    if ((thread_id = _beginthread(thread_code,4096,(void *)i)) == -1)
    #endif
    {
        printf("不能创建线程:%d, errno = %d\n",i,errno);
        return;
    }
    //如果需要的话,可以用此函数使线程休眠
    //::SuspendThread((void*)thread_id);

    printf("创建线程成功: %d,线程句柄:ID = %ld\n",i,thread_id);
}

int main(int argc, char* argv[])
{
    int i;

    getchar();//等待一下,在任务管理器中,查看线程创建前后变化

    for (i = 0; i < 10; i++)
       start_thread(i);

    printf("回车退出主线程.\n");
    getchar();
    return 0;
}

(1)_beginthread在线程结束时,会自动调用_endthread函数。在回调函数中显式调用也不会出错。
(2)_beginthread函数创建成功时,返回线程句柄。此句柄可被SuspendThread 和 ResumeThread函数调用。
(3)_beginthread调用出错时,返回的是-1,同时会将具体错误类型存放到全局的errno中,可以GetLastError函数查看。一般会有以下几种情况:
EAGAIN       线程过多
EINVAL        非法栈内存 (至少大于16或者为0)
ENOMEM    没有足够内存
(4)线程回调函数无返回值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值