MAC COCOA一个简单的多线程程序

功能:

实现多线程:2个线程同时工作,一个用时间计数器,一个用来打印信息

STEP1

XCODE -》New Application -》Cocoa中的Command Line

自动增加:

#include <CoreFoundation/CoreFoundation.h>

STEP2

//
//  main.c
//  test_runloop1
//
//  Created by DMD on 20/6/14.
//  Copyright (c) 2014 EDU. All rights reserved.
//

/*
  Test Thread
 */

#include <CoreFoundation/CoreFoundation.h>

// Just for this c file.
static int g_vid=1;

static void _perform(void *info __unused)
{
    printf("No %d. hello,\n",g_vid);
    g_vid++;
}

static void _timer(CFRunLoopTimerRef timer __unused, void *info)
{
    g_vid++;

    CFRunLoopSourceSignal(info);
}

int main(int argc, const char * argv[])
{
    // insert code here...
    CFRunLoopSourceRef source;
    CFRunLoopSourceContext source_context;

    // 第一个线程:执行自定义的函数:_perform
    bzero(&source_context, sizeof(source_context));
    //调用要执行的函数
    source_context.perform = _perform;
    //声称循环源
    source = CFRunLoopSourceCreate(NULL, 0, &source_context);
    //将循环源增加到当前线程里面去
    CFRunLoopAddSource(CFRunLoopGetCurrent(), source, kCFRunLoopCommonModes);

    // 第二个线程:一个时间计数器
    CFRunLoopTimerRef timer;
    CFRunLoopTimerContext timer_context;

    bzero(&timer_context, sizeof(timer_context));
    timer_context.info = source;
    //生成时间循环源
    timer = CFRunLoopTimerCreate(NULL, CFAbsoluteTimeGetCurrent(), 1, 0, 0,
                                 _timer, &timer_context);
    //增加时间循环器
    CFRunLoopAddTimer(CFRunLoopGetCurrent(), timer, kCFRunLoopCommonModes);

    CFRunLoopRun();
    return 0;
}

以上代码可读性不高,可以看下面的代码

//

//  main.c

//  test_runloop1

//

//  Created by DMD on 20/6/14.

//  Copyright (c) 2014 EDU. All rights reserved.

//

/*

Test Thread

*/

#include <CoreFoundation/CoreFoundation.h>

// Just for this c file.

staticint g_vid=1;

staticvoid _perform(void *info__unused)

{

printf("No %d. hello,\n",g_vid);

g_vid++;

}

staticvoid _timer(CFRunLoopTimerRef timer
__unused, void *info)

{

g_vid++;

CFRunLoopSourceSignal(info);

}

int main(int argc,const
char * argv[])

{

// insert code here...

CFRunLoopSourceRef source;

CFRunLoopSourceContext source_context;

//
第一个线程:执行自定义的函数:_perform

bzero(&source_context,
sizeof(source_context));

//调用要执行的函数

source_context.perform =_perform;

//声称循环源

source =CFRunLoopSourceCreate(NULL,0, &source_context);

//将循环源增加到当前线程里面去

CFRunLoopAddSource(CFRunLoopGetCurrent(), source,kCFRunLoopCommonModes);

//第二个线程:一个时间计数器

CFRunLoopTimerRef timer;

CFRunLoopTimerContext timer_context;

bzero(&timer_context,
sizeof(timer_context));

timer_context.info = source;

//生成时间循环源

timer = CFRunLoopTimerCreate(NULL,CFAbsoluteTimeGetCurrent(),
1,0,
0,

_timer, &timer_context);

//增加时间循环器

CFRunLoopAddTimer(CFRunLoopGetCurrent(), timer,kCFRunLoopCommonModes);

CFRunLoopRun();

return
0;

}

如图

测试成功!

参考:

http://blog.csdn.net/onlyou930/article/details/7423161

MAC COCOA一个简单的多线程程序

时间: 2025-01-05 15:53:50

MAC COCOA一个简单的多线程程序的相关文章

MAC COCOA一个简单的多线程程序[2]

MAC COCOA一个简单的多线程程序[2] 使用RUNLOOP计数,实现一个时间计数器和事件at the same time 运行. STEP 1 H CODE: // // EDUAppDelegate.h // test_runloop_multithread // // Created by DMD on 23/6/14. // Copyright (c) 2014 EDU. All rights reserved. // #import <Cocoa/Cocoa.h> @interf

如何利用CEF3创建一个简单的应用程序 (Windows Platform)

1. 说明 这篇文章主要讲述如何利用CEF3来创建一个简单的应用程序,引用的是1535及以上版本中包含的 Cefsimple 项目例子.如果想知道关于CEF3更多的使用方法,可以去访问 GeneralUsage. 2. 开始 首先,根据自身所使用的开发平台,可以去 这里 下载对应的发布版本.针对这个教程,我们需要下载1750或者更新的版本.当前支持的平台有Windows, Linux和Mac OS X.每一个版本都包含了当在特定平台上编译特定版本CEF3时所需要的所有文件和资源.您可以通过包含在

如何利用CEF3创建一个简单的应用程序

说明: 这篇文章主要讲述如何利用CEF3来创建一个简单的应用程序,它参考了1535及以上版本中包含的 Cefsimple 项目例子.如果想知道关于CEF3更多的使用方法,可以去访问 GeneralUsage. 开始: 首先,根据自身所使用的开发平台,可以去这里下载对应的发布版本.针对这个教程,我们需要下载1750或者更新的版本.当前支持的平台有Windows, Linux和Mac OS X.每一个版本都包含了当在特定平台上编译特定版本CEF3时所需要的所有文件和资源.您可以通过包含在里边的 RE

一个简单的多线程爬虫

   本文介绍一个简单的多线程并发爬虫,这里说的简单是指爬取的数据规模不大,单机运行,并且不使用数据库,但保证多线程下的数据的一致性,并且能让爬得正起劲的爬虫停下来,而且能保存爬取状态以备下次继续. 爬虫实现的步骤基本如下: 分析网页结构,选取自己感兴趣的部分; 建立两个Buffer,一个用于保存已经访问的URL,一个用户保存带访问的URL; 从待访问的Buffer中取出一个URL来爬取,保存这个URL中感兴趣的信息:并将这个URL加入已经访问的Buffer中,然后将这个URL中的所有外链URL

大数据之网络爬虫-一个简单的多线程爬虫

   本文介绍一个简单的多线程并发爬虫,这里说的简单是指爬取的数据规模不大,单机运行,并且不使用数据库,但保证多线程下的数据的一致性,并且能让爬得正起劲的爬虫停下来,而且能保存爬取状态以备下次继续. 爬虫实现的步骤基本如下: 分析网页结构,选取自己感兴趣的部分; 建立两个Buffer,一个用于保存已经访问的URL,一个用户保存带访问的URL; 从待访问的Buffer中取出一个URL来爬取,保存这个URL中感兴趣的信息:并将这个URL加入已经访问的Buffer中,然后将这个URL中的所有外链URL

利用JSP编程技术实现一个简单的购物车程序

实验二   JSP编程 一.实验目的1. 掌握JSP指令的使用方法:2. 掌握JSP动作的使用方法:3. 掌握JSP内置对象的使用方法:4. 掌握JavaBean的编程技术及使用方法:5. 掌握JSP中数据库编程方法: 二.实验要求 : 利用JSP编程技术实现一个简单的购物车程序,具体要求如下. (1)用JSP编写一个登录页面,登录信息中有用户名和密码,分别用两个按钮来提交和重置登录信息. (2)编写一个JSP程序来处理用户提交的登录信息,如果用户名为本小组成员的名字且密码为对应的学号时,采用J

一个简单的Qt程序分析

本文概要:通过一个简单的Qt程序来介绍Qt程序编写的基本框架与一些Qt程序中常见的概念 #include <QApplication> #include <QPushButton> int main(int argc, char *argv[]) { QApplication app(argc, argv); QPushButton *button = new QPushButton("Quit"); QObject::connect(button, SIGNA

通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的

实验一:通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的 学号:20135114 姓名:王朝宪 注: 原创作品转载请注明出处   <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 1 1)实验部分(以下命令为实验楼64位Linux虚拟机环境下适用,32位Linux环境可能会稍有不同) 使用 gcc –S –o main.s main.c -m32 命令编译成汇编代码,如下代码中的数字请自行修改以防与

一个简单的Java程序

一个.NET技术还是很菜的水平的猿人现在要去学习Java不知道是坏是好,无从得知啊! 不过在网上看了好多Java方面的简单例子,感觉Java还是蛮不错的么!不管以后怎么样啦,先开始自己的Java菜鸟之旅吧! 建立一个Java项目,建立一个属于自己的包,然后就开始自己的Java之旅... 创建的时候勾上这个生成main方法的选项,这个好像类似与我们.Net程序里控制台程序有木有.... 创建完成后就是这么一个样子,可以看到我们的包,还有给我们创建好自己的类,并且带了一个静态的main方法咋看就像.