C++怎么实现多进程?

505404303202101 2003-06-11 12:39:12
就是在一个函数不断执行的同时,让系统分出一部分资源执行另一个不同的函数。
麻烦您给讲讲,万分感谢!!!
...全文
1209 15 打赏 收藏 转发到动态 举报
写回复
用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函数来启动线程,以后的事基本上不用你管了.

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧