C语言如何实现多线程同时运行

我这里有个两函数
int i=0;
void fun()
{
Sleep(1000);

printf("%d\n",i);

}
还有一个
void sound()
{
Beep(2000,8000);//响8秒

}
我想要每1秒输出一个数,但是执行到Beep函数就会阻塞8秒
求多线程方法解决这个问题

1、点击菜单栏的“Project”选项卡,下拉列表的最后一项“Project options...”是对当前工程的的属性进行设置的。

2、选择弹出对话框中的“Compiler”选项卡。

3、将其中的“Runtime Library”的选择改为“Multithreaded (LIB)”。

4、将看到对话框最下面的文本框中发生了一些变化,新增了“-MT”选项,这与编译器一开始所报的错误提示给出的解决方案一致。

5、页面的设置完成后,再对该源码进行编译时,就能愉快地看到编译完全成功。

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-09-10

1、使用pthread库执行多线程,这个是Linux下的线程库 Windows下应该有自己的API,不过这种东西一般还是以Linux为标准。pthread_create()创建一个线程,传入fun()的函数指针就行了。


2、例程:

#include <pthread.h>
#include <stdio.h>
#include <sys/time.h>
#include <string.h>
#define MAX 10
pthread_t thread[2];
pthread_mutex_t mut;
int number=0, i;
void *thread1()
{
printf ("thread1 : I'm thread 1\n");
for (i = 0; i < MAX; i++)
{
printf("thread1 : number = %d\n",number);
pthread_mutex_lock(&mut);
number++;
pthread_mutex_unlock(&mut);
sleep(2);
}
printf("thread1 :主函数在等我完成任务吗?\n");
pthread_exit(NULL);
}
void *thread2()
{
printf("thread2 : I'm thread 2\n");
for (i = 0; i < MAX; i++)
{
printf("thread2 : number = %d\n",number);
pthread_mutex_lock(&mut);
number++;
pthread_mutex_unlock(&mut);
sleep(3);
}
printf("thread2 :主函数在等我完成任务吗?\n");
pthread_exit(NULL);
}
void thread_create(void)
{
int temp;
memset(&thread, 0, sizeof(thread)); //comment1
/*创建线程*/
if((temp = pthread_create(&thread[0], NULL, thread1, NULL)) != 0) //comment2
printf("线程1创建失败!\n");
else
printf("线程1被创建\n");
if((temp = pthread_create(&thread[1], NULL, thread2, NULL)) != 0) //comment3
printf("线程2创建失败");
else
printf("线程2被创建\n");
}
void thread_wait(void)
{
/*等待线程结束*/
if(thread[0] !=0) { //comment4
pthread_join(thread[0],NULL);
printf("线程1已经结束\n");
}
if(thread[1] !=0) { //comment5
pthread_join(thread[1],NULL);
printf("线程2已经结束\n");
}
}
int main()
{
/*用默认属性初始化互斥锁*/
pthread_mutex_init(&mut,NULL);
printf("我是主函数哦,我正在创建线程,呵呵\n");
thread_create();
printf("我是主函数哦,我正在等待线程完成任务阿,呵呵\n");
thread_wait();
return 0;
}

第2个回答  2015-09-18
c11自带多线程库<threads.h>,旧版本的c则要调用对应的系统api或第三方库
第3个回答  推荐于2016-01-26
使用pthread库执行多线程,这个是Linux下的线程库 Windows下应该有自己的API,不过这种东西一般还是以Linux为标准。pthread_create()创建一个线程,传入fun()的函数指针就行了。
然后这个Beep()的需求要进行线程间通信,可以用共享内存的方法,设一个bool变量flag共享,然后beep的时候设为false,beep完设成true。fun()里面每次看一下这个flag,是false的话就不做动作等下一秒,基本可以满足需求。
这样做的好处是实现简单,但时间是以1s为单位的。如果要8秒结束立刻执行,需要用条件变量的方法来控制,比较复杂,这样的实现方式一个可以满足需求了。本回答被提问者和网友采纳

c语言如何实现多线程同时运行
一、引入线程库 在C语言中实现多线程,首先需要引入相关的线程库。常见的线程库有pthreads库,它是可移植的,可以在多种操作系统上运行。通过包含对应的头文件,我们可以使用其中的函数来创建和管理线程。二、创建线程 在引入了线程库之后,我们需要创建线程。可以使用pthread_create函数来创建一个新的线程。

c语言如何实现多线程同时运行
C语言可以通过使用多线程库实现多线程同时运行。C语言本身并没有内置的多线程支持,但可以通过使用POSIX线程等第三方库来实现多线程编程。以下是对该过程的 1. 引入pthreads库:要使用多线程,首先需要安装并引入pthreads库。这个库提供了创建和管理线程所需的函数和机制。2. 创建线程:使用`pthread_creat...

C语言如何实现多线程同时运行
要实现C语言的多线程同时运行,首先打开项目设置。在菜单栏中选择"Project"选项,向下拉选择"Project options...",这是对项目属性进行配置的地方。接下来,进入对话框并切换到"Compiler"选项卡。在这里,重要一步是更改"Runtime Library"设置,将其更改为"Multithreaded (LIB)",这有助于支持多线程编程。

C语言如何实现多线程同时运行
创建一个线程需要两步:1、实线线程函数和开始线程,不需要由CWinThread派生类。2、可以不加修改地使用CWinThread。AfxBeginThread有两种形式,一种是用来创建用户界面线程的,另一种就是用来创建工作线程的.为了开始执行线程,只需要向AfxBeginThread提供一定的参数即可。

C语言如何实现多线程同时运行
1、点击菜单栏的“Project”选项卡,下拉列表的最后一项“Project options...”是对当前工程的的属性进行设置的。2、选择弹出对话框中的“Compiler”选项卡。3、将其中的“Runtime Library”的选择改为“Multithreaded (LIB)”。4、将看到对话框最下面的文本框中发生了一些变化,新增了“-MT”选项,这...

c语言怎么同时运行4段
可以使用多线程的办法,同时运行的方法如下:1)使用void*myfunc(void*args){;2)在intmain(){limian写四组pthread,pthread_create(),pthread_join();3)最后return0。多线程(multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间...

用C语言如何实现多线程同时运行的情况下,各个线程输出不同的随机数...
1、使用pthread库执行多线程,这个是Linux下的线程库 Windows下应该有自己的API,不过这种东西一般还是以Linux为标准。pthread_create()创建一个线程,传入fun()的函数指针就行了。然后这个Beep()的需求要进行线程间通信,可以用共享内存的方法,设一个bool变量flag共享,然后beep的时候设为false,beep完设成true。fun()...

C语言能实现多线程么
可以通过调用C语言函数库pthread里的函数,创建多线程。多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务,也就是说允许单个程序创建多个并行执行的线程来完成各自的任务。C语言最初并未设计多线程的机制,随着软硬件的发展及需求的发展,C语言才开发了线程库以...

C语言中.怎么同时执行两个不同的循环
这个要用到多线程了,给你个例子:include<stdio.h>#include <conio.h> #include<Windows.h>#include <process.h> char c=0;VOID B(PVOID p) \/\/线程B {while (1){if (c=='b'||c=='B')break;printf("BBB ");Sleep(200); \/\/延时}}VOID C(PVOID p) \/\/线程C{while...

在linux下用c语言实现用多进程同步方法演示“生产者-消费者”问题_百度...
NULL);}exit(0); }在Linux下编译的时候,要在编译命令中加入选项-lpthread以包含多线程支持。比如存储的C文件为demo.c,要生成的可执行文件为demo。可以使用命令:gcc demo.c -o demo -lpthread 程序中为便于观察,使用了sleep(1);来暂停运行,所以查看输出的时候可以看到,输出是每秒打印一次的。

相似回答