如何在C++下实现双进程

myzhanglu 2008-03-12 12:36:06
为了毕业设计搞得快疯了,求一相关源代码,小弟先谢过各位达人了
...全文
527 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
huatian008 2009-12-25
  • 打赏
  • 举报
回复
做课程设计啊,移植一个开源嵌入式的操作系统吧,目标明确还长知识
fallening 2008-05-09
  • 打赏
  • 举报
回复
我给出一个linux下多进程的例子
$ cat fork.c
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>

int main()
{
pid_t childid;

unsigned int i = 0;

for( i = 0; i < 10; ++i )
{
if ( childid = fork() ) //有人知道怎么去掉这里的警告么?
break;
fprintf( stderr, "i: %d process ID: %ld parent ID: %ld child ID: %ld\n",
i, (long)getpid(), (long)getppid(), (long)childid
);
}


return 0;
}
$ g++ -o fk fork.c -Wall
fork.c: In function ‘int main()’:
fork.c:13: warning: suggest parentheses around assignment used as truth value
$ ./fk
i: 0 process ID: 4606 parent ID: 4605 child ID: 0
i: 1 process ID: 4607 parent ID: 4606 child ID: 0
i: 2 process ID: 4608 parent ID: 4607 child ID: 0
i: 3 process ID: 4609 parent ID: 4608 child ID: 0
i: 4 process ID: 4610 parent ID: 4609 child ID: 0
i: 5 process ID: 4611 parent ID: 4610 child ID: 0
i: 6 process ID: 4612 parent ID: 4611 child ID: 0
i: 7 process ID: 4613 parent ID: 4612 child ID: 0
i: 8 process ID: 4614 parent ID: 4613 child ID: 0
i: 9 process ID: 4615 parent ID: 4614 child ID: 0
fallening 2008-05-09
  • 打赏
  • 举报
回复
[Quote=引用楼主 myzhanglu 的帖子:]
为了毕业设计搞得快疯了,求一相关源代码,小弟先谢过各位达人了
[/Quote]
你确认是双进程不是双线程么?
如果是的话去翻一下linux中的fork函数
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ppzzhhsky 的回复:]
int ostask1()
{
while(1)
{
}
}
int ostask2()
{
while(1)
{
}
}
main()
{
settimer();
ostask1();
~~~~~~~~~~~~~你在这里挂住了
ostask2();
}
[/Quote]
使用fork派生子进程干活是王道
knowledge_Is_Life 2008-05-01
  • 打赏
  • 举报
回复
支持搂主,收藏
Willin 2008-04-08
  • 打赏
  • 举报
回复
你是指多个进程同时启动吗?可以尝试作业。
xkyx_cn 2008-03-24
  • 打赏
  • 举报
回复
mark
自由建客 2008-03-24
  • 打赏
  • 举报
回复
樓主指的可是協同進程?
独孤过儿 2008-03-23
  • 打赏
  • 举报
回复
你必须要挂靠到具体的操作系统上,这个问题才有意义!否则...
chengzhe 2008-03-23
  • 打赏
  • 举报
回复
createprocess??
Erorr 2008-03-22
  • 打赏
  • 举报
回复
难道误解LZ的意思了?
LZ是不是要自己实现多进程的接口
但不管怎样,参考ACE实现多进程的代码也一样:)
hell_wolf 2008-03-22
  • 打赏
  • 举报
回复
这是操作系统的东西.
Erorr 2008-03-21
  • 打赏
  • 举报
回复
C++本身好像不支持
需要第三方程序库的支持
可以考虑使用ACE
相关资料:
http://www.cse.wustl.edu/~schmidt/ACE.html
hslinux 2008-03-16
  • 打赏
  • 举报
回复
LZ想搞病毒啊。^_^
duppeng 2008-03-13
  • 打赏
  • 举报
回复
所谓的进程,分的不是语言而是语言所在的系统平台,要执行多进程要调用系统函数,在windows下是CreateProcess()
在linux下是fork()
kakarot23 2008-03-12
  • 打赏
  • 举报
回复
C++语言没这个功能吧
要涉及到系统API
myzhanglu 2008-03-12
  • 打赏
  • 举报
回复
楼上的几位老大,能详细一点吗?
ppzzhhsky 2008-03-12
  • 打赏
  • 举报
回复
osTaskCreate(
(UINT8*)"console",
(PTV)consoleTask,
(void*)STACKSIZE_CONSOLE,
(void*)&gConsoleStack[STACKSIZE_CONSOLE - 1],
1 );
#endif

#endif
/* Create "Dispatcher task" */
osTaskCreate(
(UINT8*)"dispatcher",
(PTV)dispatcherTask,
(void*)STACKSIZE_DISPATCHER,
(void *)&gDispatcherStack[STACKSIZE_DISPATCHER - 1],
OS_PRIO_DISPATCHER );
michney 2008-03-12
  • 打赏
  • 举报
回复
#include <windows.h>
#include <stdio.h>

void main( VOID )
{
STARTUPINFO si;
PROCESS_INFORMATION pi;

ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );

// Start the child process.
if( !CreateProcess( NULL, // No module name (use command line).
TEXT("MyChildProcess"), // Command line.
NULL, // Process handle not inheritable.
NULL, // Thread handle not inheritable.
FALSE, // Set handle inheritance to FALSE.
0, // No creation flags.
NULL, // Use parent's environment block.
NULL, // Use parent's starting directory.
&si, // Pointer to STARTUPINFO structure.
&pi ) // Pointer to PROCESS_INFORMATION structure.
)
{
printf( "CreateProcess failed (%d).\n", GetLastError() );
return;
}

// Wait until child process exits.
WaitForSingleObject( pi.hProcess, INFINITE );

// Close process and thread handles.
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
}
ppzzhhsky 2008-03-12
  • 打赏
  • 举报
回复
int ostask1()
{
while(1)
{
}
}
int ostask2()
{
while(1)
{
}
}
main()
{
settimer();
ostask1();
ostask2();
}
第一章 走进linux 1.1 GNU与Linux的成长 1.2 Linux的开发模式和运作机制 1.3走进Linux内核 1.4 分析Linux内核的意义 1.5 Linux内核结构 1.6 Linux内核源代码 1.7 Linux内核源代码分析工具 第二章 Linux运行的硬件基础 2.1 i386的寄存器 2.2 内存地址 2.3 段机制和描述符 2.4 分页机制 2.5 Linux中的分页机制 2.6 Linux中的汇编语言 第三章中断机制 3.1 中断基本知识 3.2中断描述符表的初始化 3.3异常处理 3.4 中断处理 3.5中断的后半部分处理机制 第四章 进程描述 4.1 进程和程序(Process and Program) 4.2 Linux中的进程概述 4.3 task_struct结构描述 4.4 task_struct结构在内存中的存放 4.5 进程组织的方式 4.6 内核线程 4.7 进程的权能 4.8 内核同步 第五章进程调度 5.1 Linux时间系统 5.2 时钟中断 5.3 Linux的调度程序-Schedule( ) 5.4 进程切换 第六章 Linux内存管理 6.1 Linux的内存管理概述 6.2 Linux内存管理的初始化 6.3 内存的分配和回收 6.4 地址映射机制 6.5 请页机制 6.6 交换机制 6.7 缓存和刷新机制 6.8 进程的创建和执行 第七章 进程间通信 7.1 管道 7.2 信号(signal) 7.3 System V 的IPC机制 第八章 虚拟文件系统 8.1 概述 8.2 VFS中的数据结构 8.3 高速缓存 8.4 文件系统的注册、安装与拆卸 8.5 限额机制 8.6 具体文件系统举例 8.7 文件系统的系统调用 8 .8 Linux2.4文件系统的移植问题 第九章 Ext2文件系统 9.1 基本概念 9.2 Ext2的磁盘布局和数据结构 9.3 文件的访问权限和安全 9.4 链接文件 9.5 分配策略 第十章 模块机制 10.1 概述 10.2 实现机制 10.3 模块的装入和卸载 10.4 内核版本 10.5 编写内核模块 第十一章 设备驱动程序 11.1 概述 11.2 设备驱动基础 11.3 块设备驱动程序 11.4 字符设备驱动程序 第十二章 网络 12.1 概述 12.2 网络协议 12.3 套接字(socket) 12.4 套接字缓冲区(sk_buff) 12.5 网络设备接口 第十三章 启动系统 13.1 初始化流程 13.2 初始化的任务 13.3 Linux 的Boot Loarder 13.4 进入操作系统 13.5 main.c中的初始化 13.6 建立init进程 附录: 1 Linux 2.4内核API 2.1 驱动程序的基本函数 2.2 向循环链表的操作 2.3 基本C库函数 2.4 Linux内存管理中Slab缓冲区 2.5 Linux中的VFS 2.6 Linux的连网 2.7 网络设备支持 2.8 模块支持 2.9 硬件接口 2.10 块设备 2.11 USB 设备

5,530

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 模式及实现
社区管理员
  • 模式及实现社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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