社区
工具平台和程序库
帖子详情
C++怎么实现多进程?
505404303202101
2003-06-11 12:39:12
就是在一个函数不断执行的同时,让系统分出一部分资源执行另一个不同的函数。
麻烦您给讲讲,万分感谢!!!
...全文
1209
15
打赏
收藏
C++怎么实现多进程?
就是在一个函数不断执行的同时,让系统分出一部分资源执行另一个不同的函数。 麻烦您给讲讲,万分感谢!!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
晨星
2003-06-11
打赏
举报
回复
To:505404303202101 ()
关于:nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex
“Project/Settings/General”把“Microsoft Foundation Classes”选项改为:“Using MFC in a Shared DLL”或“Using MFC in a Static Libaray”。
505404303202101
2003-06-11
打赏
举报
回复
1
控制台?
不好意思,我是初学者,还不知道什么是控制台?
fanqing
2003-06-11
打赏
举报
回复
控制台可以实现。(一般图形函数不可用)
505404303202101
2003-06-11
打赏
举报
回复
编译连接时的错误没了,但是用debug方式执行程序时执行到WINMAIN.cpp的这句时
出错:pThread->InitInstance()
505404303202101
2003-06-11
打赏
举报
回复
我现在遇到的问题还很初级:
怎样才能使用beginthread函数?
我按照书上说的那样,加上了process.h这个头文件,但是,编译时,还是提示我
这个函数未知,请问这是为什么?
ckacka
2003-06-11
打赏
举报
回复
_beginthread(
void(__cdel *start_address)(void*),
usigned stack_size,
void *arglist
);
是不被推荐使用的
因为在某些时候,即便是成功返回了handle,这个handle也不一定可用
至于原因有很多,我就不列举了,有兴趣的朋友可以自己去找些资料看看
Microsoft稍候推出_beginthreadex()就是为了解决这个问题的
CreateThread()也是不安全的
505404303202101
2003-06-11
打赏
举报
回复
to:晨星
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex
Wendydd
2003-06-11
打赏
举报
回复
用boost库
boost::thread
北极猩猩
2003-06-11
打赏
举报
回复
还有UNIX下是
pthread
短歌如风
2003-06-11
打赏
举报
回复
#include <cstdio>
#include <cprocess>
#include <iostream>
#include <windows>
struct ThreadData
{
int thread_no;
int interval;
};
void thread_code(void * in_data)
{
ThreadData* Data = static_cast<ThreadData*>(in_data);
for (int i = 0; i < 10; i ++)
{
std::cout << "thread no:" << Data->thread_no << std::endl;
Sleep(Data->interval);
}
}
int main(void)
{
ThreadData Data1 = {1, 300};
ThreadData Data2 = {2, 500};
std::_beginthread(thread_code, 4096, static_cast<void*>(&Data1));
std::_beginthread(thread_code, 4096, static_cast<void*>(&Data2));
std::cin.get();
return 0;
}
在BCB6.0下编译通过。
晨星
2003-06-11
打赏
举报
回复
哦。
短歌如风
2003-06-11
打赏
举报
回复
应该使用_beginthread或_beginthreadex,不要使用CreateThread。因为在C/C++标准库库函数中有些函数不是线程安全的,在使用_beginthread系列时,会设置一个标志,从而库函数会知道当前程序是多线程的,会在这些函数中做特殊处理(如rand函数,它在单线程模式中使用了一个静态变量,如果当前有多个线程调用它而它又不知道,就可能出现问题,更危险的就是strtok函数),而使用CreateThread创建线程时库函数无法知道你的程序是多线程的,这样就会出问题。
晨星
2003-06-11
打赏
举报
回复
怎么丢了半句?^_^
另一个线程则每隔一秒种输出一次当前时间。
晨星
2003-06-11
打赏
举报
回复
Windows系统中可以使用API:CreateThread。
下面是个非常简单的例子,一个线程不断等待并用户的按键并输出,另一个线程则每个一秒种
//多线程示例,VC6.0调试通过。
#include <stdio.h>
#include <afx.h>
#include <conio.h>
#define ESC 27
DWORD WINAPI ThreadFunc(LPVOID lpParam);//声明线程函数。
volatile BOOL bToStop = FALSE;
int main()
{
CreateThread(NULL , 0 , ThreadFunc , NULL , 0 , NULL);
char ch;
//不断获取并输出用户的按键,知道用户按下ESC。
while((ch = getch()) != ESC)
printf("You pressed: %d[ %c ]\n" , ch , ch);
bToStop = TRUE;
Sleep(1000);//等待工作线程退出。
return 0;
}
//线程函数定义
DWORD WINAPI ThreadFunc(LPVOID lpParam)
{
printf("I am running now!\n");
//不断获取当前时间并输出,知道主线程把全局变量bToStop设为TRUE。
while(!bToStop)
{
CTime t = CTime::GetCurrentTime();
printf("%02d:%02d:%02d\n" , t.GetHour() , t.GetMinute() , t.GetSecond());
Sleep(1000);
}
return 0;
}
redleaves
2003-06-11
打赏
举报
回复
还是在一个进行下用多线程吧.多进程协调起来很麻烦
比如:在windows下.
用_beginthreadex函数来启动线程,以后的事基本上不用你管了.
C++
多进程
开发
C++
多进程
开发
c++
多进程
编程
c++
多进程
编程 介绍 进程:进程是一个正在执行的程序,是向CPU申请资源的,进程之间数据相互独立,一个进程至少有一个线程。 线程:线程是进程中的单一的顺序控制流程也可以叫做最小控制单元,线程是进程中执行单元,开启一个线程比开启一个进程更加节省资源。 多线程:多线程是多任务处理的一种特殊形式,多任务处理允许让电脑同时运行两个或两个以上的程序。一般情况下,两种类型的多任务处理:基于进程和基于线程。...
C++
多线程----进程与线程区别
本篇文章围绕以下几个问题展开: 何为进程?何为线程?两者有何区别?何为并发?
C++
中如何解决并发问题?
C++
中多线程的语言
实现
?同步互斥原理以及
多进程
和多线程中
实现
同步互斥的两种方法Qt中的多线程应用 引入 传统的
C++
(
C++
98)中并没有引入线程这个概念。linux和unix操作系统的设计采用的是
多进程
,进程间的通信十分方便,同时进程之间互相有着独立的空间,不会污染其他进程的数据,天然的隔离性给程序的稳定性带来了很大的保障。而线程一直都不是linux和uni...
C++
多进程
有操作系统相关知识的应该知道,线程是轻量级的进程,每个线程可以独立的运行不同的指令序列,但是线程不独立的拥有资源,依赖于创建它的进程而存在。也就是说,同一进程中的多个线程共享相同的地址空间,可以访问进程中的大部分数据,指针和引用可以在线程间进行传递。它往往与其他通信机制,如信号量,配合使用,来
实现
进程间的同步和通信。共享内存:能够很容易控制容量,速度快,但要保持同步,比如一个进程在写的时候,另一个进程要注意读写的问题;管道,通常指无名管道,管道是最简单,效率最差的一种通信方式,不适合进程间频繁的交换数据。
C++
创建
多进程
cocos2dx引擎 封装的均为单进程,为了游戏性能的需要 下面将尝试使用
C++
代码开辟出一条线程,让其执行函数: if (result) // 判断 { CCLOG("connect to server success!"); //开启新线程,在子线程中,接收数据 std::thread recvThread = std::thread(&HelloWorld
工具平台和程序库
24,854
社区成员
27,343
社区内容
发帖
与我相关
我的任务
工具平台和程序库
C/C++ 工具平台和程序库
复制链接
扫一扫
分享
社区描述
C/C++ 工具平台和程序库
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章