功能:

实现多线程: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,constchar * 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();

return0;

}

如图

測试成功。

參考:

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

重要补充:

CFRunLoopRun();

以上函数,假设不用,就会在运行中。能够做其它的事件。假设用了这个函数。就会在xib界面中运行中将界面卡住。无法去做其它事情。

- (IBAction)OnBT_Stop:(id)sender

{

m_window_main.public_integer =
0;

}

会出现一个编译成功,可是执行不了,提示:请选择能够执行的框架,原因是:m_window_main 是本身的类,在本身里面不能前面增加自己。

另外,假设在一个m文件中面调用非类函数或者变量。比如在m里面写的C++函数。

须要额外申明这个类的变量指针。而且初始化函数里面 =self

比如在m文件头

static
EDUAppDelegate *m_window_main;

初始化函数里面须要

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification

{

// Insert code here to initialize your application

m_window_main =
self;

}

这样才干够在其它非类函数里面调用类H定义的各种变量和函数。

调用函数的方法:

[m_window_main funct:var1];

也能够直接调用里面的变量Control

m_window_main.m_lable1=@"aaa";

[END]


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

  1. 使用Go开发一个简单的服务器程序

    最近有个小项目,需要一个简单的后台程序来支撑,本来想用Nodejs来做,但是由于本人js一直很菜,并且很讨厌callback,虽然我也很喜欢异步模型,但我一直都觉得JS是反人类的.后台就用了go处理, ...

  2. 一个简单的多线程Python爬虫(一)

    一个简单的多线程Python爬虫 最近想要抓取拉勾网的数据,最开始是使用Scrapy的,但是遇到了下面两个问题: 前端页面是用JS模板引擎生成的 接口主要是用POST提交参数的 目前不会处理使用JS模 ...

  3. Qt5.9一个简单的多线程实例(类QThread)(第一种方法)

    Qt开启多线程,主要用到类QThread.有两种方法,第一种用一个类继承QThread,然后重新改写虚函数run().当要开启新线程时,只需要实例该类,然后调用函数start(),就可以开启一条多线程 ...

  4. 编写一个简单的C++程序

    编写一个简单的C++程序 每个C++程序都包含一个或多个函数(function),其中一个必须命名为main.操作系统通过调用main来运行C++程序.下面是一个非常简单的main函数,它什么也不干, ...

  5. 一个简单的flask程序

    初始化 所有Flask程序都必须创建一个程序实例. 程序实例是Flask类的对象,经常使用下述代码创建: from flask import Flask app = Flask(__name__) F ...

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

    实验二   JSP编程 一.实验目的1. 掌握JSP指令的使用方法:2. 掌握JSP动作的使用方法:3. 掌握JSP内置对象的使用方法:4. 掌握JavaBean的编程技术及使用方法:5. 掌握JSP ...

  7. 输出多行字符的一个简单JAVA小程序

    public class JAVA { public static void main(String[] args) { System.out.println("-------------- ...

  8. 如何创建一个简单的struts2程序

    如何创建一个简单的Struts2程序 “计应134(实验班) 凌豪” 1.创建一个新的Web项目test(File->new->Web Project) 2.Struts2框架的核心配置文 ...

  9. Linux系统学习笔记之 1 一个简单的shell程序

    不看笔记,长时间不用自己都忘了,还是得经常看看笔记啊. 一个简单的shell程序 shell结构 1.#!指定执行脚本的shell 2.#注释行 3.命令和控制结构 创建shell程序的步骤 第一步: ...

随机推荐

  1. hdu多校5

    1002 思路:贪心显然不好贪,直接爆搜. #include<bits/stdc++.h> #define LL long long #define fi first #define se ...

  2. XenServer创建镜像Storage

    Youtube:https://www.youtube.com/watch?v=-AK3nauKUw0 在安装了XenServer后,是没有镜像Storage的,我们可以在XenCenter中创建一个 ...

  3. 三个通用的脚本,处理MySQL WorkBench导出表的JSON数据进SQLITE3

    一个通用的脚本,处理MySQL WorkBench导出表的JSON数据进SQLITE3,创建的是FTS4的虚拟表 # -*- coding:utf-8 -*- import json import s ...

  4. CF1025C Plasticine zebra【环状字符串/思维】

    给你一个长度为 \(\left|s\right|\) 的01串 \(s\) ,每次操作你可以任选一个 \(k\) ,使01串的 \([1,k]\) 和 \((k,\left|s\right|]\) 分 ...

  5. 2. 创建一个简单的Maven项目

    ☞ 创建项目 选定一个目录,如E:\workspace\maven,新建的项目将放在这个目录. 运行CMD,切换到该目录. 执行mvn archetype:generate直到输出"Choo ...

  6. 洛谷——P2121 拆地毯

    P2121 拆地毯 题目背景 还记得 NOIP 2011 提高组 Day1 中的铺地毯吗?时光飞逝,光阴荏苒,三年过去了.组织者精心准备的颁奖典礼早已结束,留下的则是被人们踩过的地毯.请你来解决类似于 ...

  7. HDU 5862 Counting Intersections(离散化 + 树状数组)

    Counting Intersections Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/ ...

  8. ES5 方法学习

    Object 1. Object.getPrototypeOf(o)获取对象的prototype对象.等价于以前的o.__proto__ var o = {}; Object.getPrototype ...

  9. JZYZOJ1454 NOIP2015 D2T3_运输计划 二分 差分数组 lca tarjan 树链剖分

    http://172.20.6.3/Problem_Show.asp?id=1454 从这道题我充分认识到我的脑子里好多水orz. 如果知道了这个要用二分和差分写,就没什么思考上的难点了(屁咧你写了一 ...

  10. BZOJ 1115 [POI2009]石子游戏Kam(阶梯博弈)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1115 [题目大意] 有N堆石子,除了第一堆外,每堆石子个数都不少于前一堆的石子个数. ...