线程按指定顺序输出字符到数组
2014-01-27 19:43
204 查看
题目:
有三个线程,线程1的功能就是向字符数组输出A,线程2的功能就是向字符数组输出B,线程2的功能就是向字符数组输出C,要求按顺序向数组赋值ABCABCABC,ABC的个数由线程函数1的参数指定。
接口说明:
void Init(); //初始化函数
void Release(); //资源释放函数
unsignedint__stdcall ThreadFun1(PVOID pM) ; //线程函数1,传入一个int类型的指针,用于初始化输出A次数,资源需要线程释放
unsignedint__stdcall ThreadFun2(PVOID pM) ;//线程函数2,无参数传入
unsignedint__stdcall ThreadFun3(PVOID pM) ;//线程函数3,无参数传入
char g_write[1024]; //线程1,线程2,线程3按到顺序向该数组赋值。不用考虑数组是否越界,测试用例保证
源代码:
有三个线程,线程1的功能就是向字符数组输出A,线程2的功能就是向字符数组输出B,线程2的功能就是向字符数组输出C,要求按顺序向数组赋值ABCABCABC,ABC的个数由线程函数1的参数指定。
接口说明:
void Init(); //初始化函数
void Release(); //资源释放函数
unsignedint__stdcall ThreadFun1(PVOID pM) ; //线程函数1,传入一个int类型的指针,用于初始化输出A次数,资源需要线程释放
unsignedint__stdcall ThreadFun2(PVOID pM) ;//线程函数2,无参数传入
unsignedint__stdcall ThreadFun3(PVOID pM) ;//线程函数3,无参数传入
char g_write[1024]; //线程1,线程2,线程3按到顺序向该数组赋值。不用考虑数组是否越界,测试用例保证
源代码:
#include <string.h> #include <stdlib.h> #include <stdio.h> #include <process.h> #include <windows.h> #define MAXHANDLE 3 char g_write[1028]; //线程1,线程2,线程3按到顺序向该数组赋值 HANDLE g_hThreadEvent[3]; HANDLE handle[MAXHANDLE]; int g_Number; //线程1函数 unsigned int __stdcall ThreadFun1(PVOID pM) { int uiNumber = *(int *)pM; int iLoop = 0; g_Number = uiNumber; for (iLoop; iLoop < uiNumber; iLoop++) { //printf("this is thread 1: %s\n", g_write); WaitForSingleObject(g_hThreadEvent[0], INFINITE); strcat(g_write, "A"); SetEvent(g_hThreadEvent[1]); } _endthreadex(0); return 0; } //线程2函数 unsigned int __stdcall ThreadFun2(PVOID pM) { int iLoop = 0; for (iLoop; iLoop < g_Number; iLoop++) { //printf("this is thread 2: %s\n", g_write); WaitForSingleObject(g_hThreadEvent[1], INFINITE); strcat(g_write, "B"); SetEvent(g_hThreadEvent[2]); } _endthreadex(0); return 0; } //线程3函数 unsigned int __stdcall ThreadFun3(PVOID pM) { int iLoop = 0; for (iLoop; iLoop < g_Number; iLoop++) { //printf("this is thread 2: %s\n", g_write); WaitForSingleObject(g_hThreadEvent[2], INFINITE); strcat(g_write, "C"); SetEvent(g_hThreadEvent[0]); } _endthreadex(0); return 0; } void Init(void) { g_hThreadEvent[0] = CreateEvent(NULL, FALSE, TRUE, NULL); g_hThreadEvent[1] = CreateEvent(NULL, FALSE, FALSE, NULL); g_hThreadEvent[2] = CreateEvent(NULL, FALSE, FALSE, NULL); memset(g_write, NULL, sizeof(g_write)); } void Release(void) { int iLoop = 0; for (int iLoop = 0; iLoop < MAXHANDLE; iLoop++) { CloseHandle(handle[iLoop]); } } int main( int Argc, char* Argv[]) { int uiNumber = 10; //需要重复打印的次数 int *num = NULL; Init(); num = (int*)malloc(sizeof(int)); *num = uiNumber; handle[0] = (HANDLE)_beginthreadex(NULL, 0, ThreadFun1, num, 0, NULL); handle[1] = (HANDLE)_beginthreadex(NULL, 0, ThreadFun2, NULL, 0, NULL); handle[2] = (HANDLE)_beginthreadex(NULL, 0, ThreadFun3, NULL, 0, NULL); WaitForMultipleObjects(MAXHANDLE, handle, TRUE, INFINITE); Release(); printf("g_write = %s\n", g_write); system("pause"); return 0; }
相关文章推荐
- 线程按指定顺序输出字符到数组的实例代码
- 剑指offer 01-06解答思路以及代码(顺序数组找特定数字,替换空格字符,链表反转输出,重建二叉树,两个栈实现队列效果,旋转数组最小元素)
- 实现一个函数,传递一个有10个已经排好序的整形元素数组(数组大小实际为11)中,将一个指定的值按顺序插入,并在main函数中将插入后的数组输出。
- 用数组输出一段字符,并将其按照由大到小的顺序排列出来
- 笔试题-输入一个字符数组将这些字符串按顺序合并输出-指针数组-数组指针-函数指针-指针函数
- C++简单例子 分别用 数组 和 指针来输出单个字符
- BufferedWriter通过字符数组来缓冲数据,当缓冲区满或者用户调用flush()函数时,它就会将缓冲区的数据写入到输出流中。
- 动态创建字符数组,且输出字符数组奇数位--使用指针
- 字符串分割为字符串数组 去除前后指定字符
- Linux系统编程:循环创建N个子线程并顺序输出
- 定义字符指针数组分别指向5个字符串常量,从小到大输出字符串内容
- C语言实现用指定字符切割字符串并返回数组
- java-第七章-数组-字符逆序输出
- 有个数组[1,2,3,4,5,6,7,8,9,10],打乱顺序生成一个新的数组输出
- 按顺序输出3个线程的变量
- iOS 实现label上字符顺序输出
- 习题 8.16 输入一个字符串,内有数字和非数字字符,将其中连续的数字作为一个整数,依次存放到一数组a中。统计共有多少个整数,并输出这些数。
- 编程练习2——01从一个字符数组中读出相应的整数、实数 例如qwe32.56dgh456ml9.4sad 应该输出 32.56 456 19.4
- 第16周项目2-去除字符串中指定字符(数组、指针作形参)
- 信号量(随意指定线程执行顺序)