⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 thread.c

📁 编译后直接运行的MP3播放器全部C语言源代码 一个包含FAT文件系统、系统引导 Boot、FLASH Driver等内容的
💻 C
字号:
/*************************************************************************** *             __________               __   ___. *   Open      \______   \ ____   ____ |  | _\_ |__   _______  ___ *   Source     |       _//  _ \_/ ___\|  |/ /| __ \ /  _ \  \/  / *   Jukebox    |    |   (  <_> )  \___|    < | \_\ (  <_> > <  < *   Firmware   |____|_  /\____/ \___  >__|_ \|___  /\____/__/\_ \ *                     \/            \/     \/    \/            \/ * $Id: thread.c,v 1.4 2002/06/14 12:44:51 bagder Exp $ * * Copyright (C) 2002 Daniel Stenberg * * All files in this archive are subject to the GNU General Public License. * See the file COPYING in the source tree root for full license agreement. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * ****************************************************************************/#include <stdio.h>#include <pthread.h>#include "kernel.h"#include <poll.h>long current_tick = 0;/* * We emulate the target threads by using pthreads. We have a mutex that only * allows one thread at a time to execute. It forces each thread to yield() * for the other(s) to run. */pthread_mutex_t mp;void init_threads(void){    pthread_mutex_init(&mp, NULL);  /* get mutex to only allow one thread running at a time */  pthread_mutex_lock(&mp);  current_tick = time(NULL); /* give it a boost from start! */}/*    int pthread_create(pthread_t *new_thread_ID,   const pthread_attr_t *attr,   void * (*start_func)(void *), void *arg);*/void yield(void){  current_tick+=3;  pthread_mutex_unlock(&mp); /* return */  pthread_mutex_lock(&mp); /* get it again */}void newfunc(void (*func)(void)){    yield();    func();}int create_thread(void* fp, void* sp, int stk_size){  pthread_t tid;  int i;  int error;  /* we really don't care about these arguments */  (void)sp;  (void)stk_size;  error = pthread_create(&tid,                         NULL,   /* default attributes please */                         (void *(*)(void *)) newfunc,   /* function to start */                         fp      /* start argument */);  if(0 != error)      fprintf(stderr, "Couldn't run thread number %d, errno %d\n", i, error);  else       fprintf(stderr, "Thread %ld is running\n", (long)tid);  yield();  return error;}/* ticks is HZ per second */void x11_sleep(int ticks){    current_tick+=5;    pthread_mutex_unlock(&mp); /* return */    /* portable subsecond "sleep" */    poll((void *)0, 0, ticks * 1000/HZ);    pthread_mutex_lock(&mp); /* get it again */}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -