功能:

实现多线程: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. 史上最全的web前端系统学习教程!

    这份资料整理花了近7天,如果感觉有用,可以分享给更有需要的人. 在看接下的介绍前,我先说一下整理这份资料的初衷: 我的初衷是想帮助在这个行业发展的朋友和童鞋们,在论坛博客等地方少花些时间找资料,把有限 ...

  2. Java数据库连接池-proxool

    连接池技术的思想: 连接复用(高效.安全),避免数据库频繁建立.关闭的开销 --------------------极客学院(参考lulei) 1.配置文件 <proxool> <! ...

  3. The 18th Zhejiang University Programming Contest Sponsored by TuSimple -C Mergeable Stack

    题目链接 题意: 题意简单,就是一个简单的数据结构,对栈的模拟操作,可用链表实现,也可以用C++的模板类来实现,但是要注意不能用cin cout,卡时间!!! 代码: #include <std ...

  4. 设置iframe 载入页面的效果跟直接打开这个页面一样

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xht ...

  5. 洛谷P3197 HNOI2008 越狱

    题目传送门 实际上昨天大鸡哥已经讲过这题了,结果没记住,今天一道相似的题就挂了......吃一堑长一智啊. 思路大致是这样:如果直接算发生越狱的情况会比较复杂,所以可以用间接法,用安排的总方案-不会发 ...

  6. JS内存管理与垃圾回收

    内存分配 var n = 374; // 为数字分配内存 var s = 'sessionstack'; // 为字符串分配内存 var o = { a: 1, b: null }; // 为对象及其 ...

  7. 【BZOJ 4572】【SCOI 2016】围棋

    http://www.lydsy.com/JudgeOnline/problem.php?id=4572 轮廓线DP:设\(f(i,j,S,x,y)\). \(S\)表示\((i,1)\)到\((i, ...

  8. 【OpenJudge9270】【Pku2440】【递推】DNA

    DNA [描述] A kind of virus has attacked the X planet, and many lives are infected. After weeks of stud ...

  9. (转)Hadoop系列-IPC模型

    学习笔记Mark IPC 实现RPC的一种方法,具有快速.简单的特点. 它不像Sun公司提供的标准RPC包,基于Java序列化. IPC无需创建网络stubs和skeletons. IPC中的方法调用 ...

  10. node webkit (nw.js) 无法调试的结局方案之一

    之前做过nw项目,当时主要内容是由别人做的!过后回到家中,自己研究了下这方面.结果发现我自己写的nw 客户端不可以调试!在网上各种找办法,没找到,深感绝望,突然看到 (https://github.c ...