求win32下的多线程控制台程序(c实现)

Windows多线程控制台程序 学习笔记 Windows多线程控制台程序目的:学习和掌握如何编写Windows多线程控制台程序。通过编写程序,加深对进程和线程关系的理解,掌握多线程程序的执行和编写技巧。设计要求:写一个单进程多线程的Windows控制台程序,该程序在一个进程内建立N个线程来执行指定的任务。N由命令行传递给系统。Win32控制台程序中,主函数的格式如:Void main(int argc,char *argv[]),可以获取命令行参数。通过VC++“工程/设置”的C/C++属性页设置应用程序为“MTD”多线程。利用win32 阅读详情

#include <process.h>
#include <stdio.h>

bool bEnd = false;

void fun(void *)
{
 for(int i = 0; i < 3; i++)
 printf("Im thread!/n");
 bEnd = true;
}


void main()
{

 _beginthread( fun, 0, NULL );
 while(!bEnd)
 {
  printf("Im process!/n");
 }
 
 printf("End of programm!/n");
}

#include <windows.h>
#include <process.h>    /* _beginthread, _endthread */
#include <stddef.h>
#include <stdlib.h>
#include <conio.h>

void Bounce( void *ch );
void CheckKey( void *dummy );

/* GetRandom returns a random integer between min and max. */
#define GetRandom( min, max ) ((rand() % (int)(((max) + 1) - (min))) + (min))

BOOL repeat = TRUE;     /* Global repeat flag and video variable */
HANDLE hStdOut;         /* Handle for console window */
CONSOLE_SCREEN_BUFFER_INFO csbi;    /* Console information structure */

void main()
{
    CHAR    ch = 'A';

    hStdOut = GetStdHandle( STD_OUTPUT_HANDLE );

    /* Get display screen's text row and column information. */
   GetConsoleScreenBufferInfo( hStdOut, &csbi );

    /* Launch CheckKey thread to check for terminating keystroke. */
    _beginthread( CheckKey, 0, NULL );

    /* Loop until CheckKey terminates program. */
    while( repeat )
    {
        /* On first loops, launch character threads. */
        _beginthread( Bounce, 0, (void *) (ch++)  );

        /* Wait one second between loops. */
        Sleep( 1000L );
    }
}

/* CheckKey - Thread to wait for a keystroke, then clear repeat flag. */
void CheckKey( void *dummy )
{
    _getch();
    repeat = 0;    /* _endthread implied */

}

/* Bounce - Thread to create and and control a colored letter that moves
 * around on the screen.
 *
 * Params: ch - the letter to be moved
 */
void Bounce( void *ch )
{
    /* Generate letter and color attribute from thread argument. */
    char    blankcell = 0x20;
    char    blockcell = (char) ch;
    BOOL    first = TRUE;
   COORD   oldcoord, newcoord;
   DWORD   result;


    /* Seed random number generator and get initial location. */
    srand( _threadid );
    newcoord.X = GetRandom( 0, csbi.dwSize.X - 1 );
    newcoord.Y = GetRandom( 0, csbi.dwSize.Y - 1 );
    while( repeat )
    {
        /* Pause between loops. */
        Sleep( 100L );

        /* Blank out our old position on the screen, and draw new letter. */
        if( first )
            first = FALSE;
        else
         WriteConsoleOutputCharacter( hStdOut, &blankcell, 1, oldcoord, &result );
         WriteConsoleOutputCharacter( hStdOut, &blockcell, 1, newcoord, &result );

        /* Increment the coordinate for next placement of the block. */
        oldcoord.X = newcoord.X;
        oldcoord.Y = newcoord.Y;
        newcoord.X += GetRandom( -1, 1 );
        newcoord.Y += GetRandom( -1, 1 );

        /* Correct placement (and beep) if about to go off the screen. */
        if( newcoord.X < 0 )
            newcoord.X = 1;
        else if( newcoord.X == csbi.dwSize.X )
            newcoord.X = csbi.dwSize.X - 2;
        else if( newcoord.Y < 0 )
            newcoord.Y = 1;
        else if( newcoord.Y == csbi.dwSize.Y )
            newcoord.Y = csbi.dwSize.Y - 2;

        /* If not at a screen border, continue, otherwise beep. */
        else
            continue;
        Beep( ((char) ch - 'A') * 100, 175 );
    }
    /* _endthread given to terminate */
    _endthread();
}

 

数据结构与算法王卓-习题-参数传递-参数为数组名传地址(C语言) 题目:用数组作为函数的参数,求10个整数的最大值 个人代码实现: #include<stdio.h> #define N 10 int max(int *a) { for (int i = 0; i < N; i++) { if (*a < *(a+i)) *a = *(a+i); } return *a; } int main() { int a[10]; int i, m; for (i = 0; i < N; i++) { scanf_s 阅读详情

相关推荐

C++ 多线程(三) Win32多线程2

C++ 多线程(三) Win32多线程2 同步/资源共享 线程之间的同步 在下面的例子中,两个线程用于计算给定范围内的所有质数。 它演示了一个数字是否为质数的测试: #include <Windows.h> #include <process.h> #include <stdio.h> #include <math.h> volatile int counter = 0; int isPrime(int n) { for(int i = 2; i

jianbiancheng的博客 561

win32多线程编程

一.深入浅出Win32多线程程序设计之基本概念 引言   从单进程单线程到多进程多线程是操作系统发展的一种必然趋势,当年的DOS系统属于单任务操作系统,最优秀的程序员也只能通过驻留内存的方式实现所谓的"多任务",而如今的Win32操作系统却可以一边听音乐,一边编程,一边打印文档。    理解多线程及其同步、互斥等通信方式是理解现代操作系统的关键一环,当我们精通了Win32多线程程

chinaliping的专栏 2752

C和Win32的多线程编程(MSDN笔记整理)

线程之间需要共享公共资源,还要接收各自的堆栈。 1. 所有线程使用的公共资源必须同步,Win32 提供了几种同步资源的方式,包括信号、临界区、事件和互斥体。 互斥体(mutual exclusion 的缩写)是异步执行的线程或进程间通信的方式。此通信通常用于协调多个线程或进程的活动,通常通过锁定和取消锁定资源控制对共享资源的访问。假定有这样一个程序,一个线程更新静态数据结构,该结构包含要由

慕小怡的专栏 1636

Win32控制台程序是什么

刚接触Windows那一套,大多数概念都还没建立起来,整理了一下网上对“Win32控制台程序”的理解,谢谢各位网友了。 win32控制台项目指在32位Windows命令提示符(即所谓的dos)环境下运行的应用程序... win32项目指运行于32位Windows操作系统中的应用程序...包括win32控制台项目... 1、Win32项目包括:Win32 应用程序、控制台应用程序、DLL 或其

学习专栏 3万+

基于win32控制台的动态库Socket编程实例,

基于win32控制台的动态库Socket编程实例,在VC6.0编译环境下通过调试,可以看成是简单的实例

C# 控制台的多线程下载程序

C# 控制台的多线程下载程序 每个进程都开始一个默认的线程,但是能从它的线程池中创建一个新的线程。 线程是允许进行并行计算的一个抽象概念:在一个线程完成计算任务的同时,另一个线程可以对图像进行更新,两个线程可同时处理同一个进程发出的两个网络请求。

Win32多线程编程(一)

我们在进行win32控制台程序调试的时候也经常会用到多线程, 这里简单的用一个例子来给初学者说明多线程编程,由此开启 多线程的编程学习,仅抛砖引玉而已,在编程的过程中深入。   1、新建win32控制台工程   2、新建c++文件并添加到工程   3、包含头文件 #include #include   4、设置工程 Project -> Settings -> C/C

zhuyonghao123的专栏 883

C# 基于控制台的多线程下载程序

C# 基于控制台的多线程下载程序,多线程分块下载,支持断点续传。可以试着改一下做成自己的下载工具。

win32线程退出C语言,多线程在C、Win32和MFC下的使用方法

下载源代码一.前言线程是执行路径。一个进程至少要有一个线程,也可能包含多个线程。若进程关闭了,则在进程中所有的线程也自动被销毁。当我们在一个应用程序中创建一个线程时,实际上,它是第二个线程。在C或C++中,程序的入口函数是main或wmain(Unicode版本)。在windows的运用程序中,程序的入口点是WinMain或wWinMain。当程序启动时,操作系统创建第一个线程。因此,window...

weixin_35637837的博客 583

实现控制台界面的多线程Server程序及Client端

实现控制台界面的多线程Server程序及Client端 操作系统:Windows XP SP2, TCP/IP协议 开发语言:C++ / MFC 编译环境:MS Visual C++6.0

C++编写 win32控制台下 Socket通信 多线程 聊天室 服务器 客户端

文件包括:服务器项目、客户端项目、说明文档 C++语言编写,SOCKET套接字通信,分服务器和客户端,多线程模型,Win32控制台。 首先聊天室分为服务端和客户端,通过TCP连接通信。运行顺序为: 1.首先打开服务服; 2.打开客户端,用户输入名字,连接到服务端后得到一个ID; 3.用户可以看到所有在线用户和所有频道,用户间可以单独聊天,也可以进入聊天频道,或者自己创建一个频道。 4.聊天频道的管理员为创建者,创建者可以剔除其他用户、禁止特定用户加入(黑名单)、解散频道、转让频道管理员身份。

如何在Win32 Console Application (Win32控制台)程序中使用MFC

如何在Win32 Console Application (Win32控制台)程序中使用MFC (1)包含afx.h文件。#include  (2)Project(工程)->Setting(设置)->General(常规)->将"no   using   MFC",改为另外2项中的任一项  。 (3)Project(工程)->Setting(设置)->C/C++   

人生代码,代码人生。。。 2074

操作系统课程设计——简单多线程

已经实现了多线程按优先权调度,线程间通信,阻塞与唤醒 注释基本齐全,但Readme还没写好

多线程在C、Win32和MFC下的使用方法

原文地址:http://www.vckbase.com/document/viewdoc/?id=1978 一.前言     线程是执行路径。一个进程至少要有一个线程,也可能包含多个线程。若进程关闭了,则在进程中所有的线程也自动被销毁。当我们在一个应用程序中创建一个线程时,实际上,它是第二个线程。在C或C++中,程序的入口函数是main或wmain(Unicode版本)。在windows的运用

tinyhell127的专栏 1228

分布式存储系统关于GDPR条例中的数据清除原则

文章目录前言HDFS存储系统数据的完全删除基于加解密的输入输出流的数据保护方案 前言 关于GDPR是什么,可能许多同学之前并不太了解,至少笔者在之前也是不清楚的。GDPR全称为通用数据保护条例,General Data Protection Regulation。它是一项来自欧盟的关于计算机数据保护相关的条约,旨在规范系统如何收集,管控用户私人数据的种种行为。但是当前的一些存储系统并没有完全符合...

走在前往架构师的路上 3623

USB2.0物理层实战:手把手教你用示波器抓取D+/D-信号(附波形分析)

本文是一份针对硬件工程师的USB2.0物理层信号调试实战指南。文章详细讲解了如何使用示波器捕获和分析D+/D-差分信号,从基础设置、核心信号状态解读,到信号完整性分析与常见问题排查,手把手教你定位USB通信故障。内容涵盖USB2.0协议物理层关键概念,并附有基础解码思路,旨在提升工程师的底层调试能力。

s8t9u0v1w的博客 449

Win32控制台程序和Win32应用程序

刚接触Windows那一套,大多数概念都还没建立起来,整理了一下网上对“Win32控制台程序”的理解,谢谢各位网友了。 win32控制台项目指在32位Windows命令提示符(即所谓的dos)环境下运行的应用程序...win32项目指运行于32位Windows操作系统中的应用程序...包括win32控制台项目... 1、Win32项目包括:Win32 应用程序、控制台应用程序、DLL 或其他...

weixin_30677475的博客 199

Jupyter实战:解决ModuleNotFoundError之xgboost缺失问题

本文详细解析了在Jupyter Notebook中遇到ModuleNotFoundError: No module named 'xgboost'错误的完整解决方案。通过诊断环境、使用pip正确安装xgboost、配置Python路径以及最终验证,帮助用户彻底解决模块缺失问题,并理解Jupyter内核与Python环境的关系,提升问题排查能力。

weixin_29064103的博客 384
上一篇: ASP编程中20个非常有用的例子
下一篇: C++ 多态性机制初探
thb28
博客等级 码龄24年 3粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值