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,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一个简单的多线程程序的更多相关文章
- 使用Go开发一个简单的服务器程序
最近有个小项目,需要一个简单的后台程序来支撑,本来想用Nodejs来做,但是由于本人js一直很菜,并且很讨厌callback,虽然我也很喜欢异步模型,但我一直都觉得JS是反人类的.后台就用了go处理, ...
- 一个简单的多线程Python爬虫(一)
一个简单的多线程Python爬虫 最近想要抓取拉勾网的数据,最开始是使用Scrapy的,但是遇到了下面两个问题: 前端页面是用JS模板引擎生成的 接口主要是用POST提交参数的 目前不会处理使用JS模 ...
- Qt5.9一个简单的多线程实例(类QThread)(第一种方法)
Qt开启多线程,主要用到类QThread.有两种方法,第一种用一个类继承QThread,然后重新改写虚函数run().当要开启新线程时,只需要实例该类,然后调用函数start(),就可以开启一条多线程 ...
- 编写一个简单的C++程序
编写一个简单的C++程序 每个C++程序都包含一个或多个函数(function),其中一个必须命名为main.操作系统通过调用main来运行C++程序.下面是一个非常简单的main函数,它什么也不干, ...
- 一个简单的flask程序
初始化 所有Flask程序都必须创建一个程序实例. 程序实例是Flask类的对象,经常使用下述代码创建: from flask import Flask app = Flask(__name__) F ...
- 利用JSP编程技术实现一个简单的购物车程序
实验二 JSP编程 一.实验目的1. 掌握JSP指令的使用方法:2. 掌握JSP动作的使用方法:3. 掌握JSP内置对象的使用方法:4. 掌握JavaBean的编程技术及使用方法:5. 掌握JSP ...
- 输出多行字符的一个简单JAVA小程序
public class JAVA { public static void main(String[] args) { System.out.println("-------------- ...
- 如何创建一个简单的struts2程序
如何创建一个简单的Struts2程序 “计应134(实验班) 凌豪” 1.创建一个新的Web项目test(File->new->Web Project) 2.Struts2框架的核心配置文 ...
- Linux系统学习笔记之 1 一个简单的shell程序
不看笔记,长时间不用自己都忘了,还是得经常看看笔记啊. 一个简单的shell程序 shell结构 1.#!指定执行脚本的shell 2.#注释行 3.命令和控制结构 创建shell程序的步骤 第一步: ...
随机推荐
- golang实现mysql数据库备份
背景 navicat是mysql可视化工具中最棒的,但是,在处理视图的导入导出方面,它是按照视图名称的字母顺序来处理的,若视图存在依赖,在导入过程中就会报错.前面已经用python写了一个,但在使用过 ...
- 利用jquery.touchSwipe.js实现的移动滑屏效果。
利用jquery.touchSwipe.js实现的移动滑屏效果. 亲测:兼容ie8及各种浏览器 <script type="text/javascript" src=&quo ...
- 9. Spark Streaming技术内幕 : Receiver在Driver的精妙实现全生命周期彻底研究和思考
原创文章,转载请注明:转载自 听风居士博客(http://www.cnblogs.com/zhouyf/) Spark streaming 程序需要不断接收新数据,然后进行业务逻辑 ...
- PDF文档盖章
概述 在pdf文档的最后一页,合适位置,添加印章图片. maven依赖 <dependency> <groupId>com.itextpdf</groupId> & ...
- shell 倒引号
`command` 倒引号 (backticks) 在前面的单双引号,括住的是字串,但如果该字串是一列命令列,会怎样?答案是不会执行.要处理这种情况,我们得用倒单引号来做. fdv=`date +%F ...
- Java的锁研究
Lock和synchronized JDK1.5以后,在锁机制方面引入了新的锁-Lock,在网上的说法都比较笼统,结合网上的信息和我的理解这里做个总结. java现有的锁机制有两种实现 ...
- ASP.NET总结——更改后
这篇重新整理的总结,我做了很久,也在草稿箱中放了很久,一直感觉没有达到和老师谈话后的水平,感觉还是需要增加一些修改,希望读者能提出宝贵意见.既这篇博客之前,我发表了一篇ASP.net的总结,在结构上, ...
- 【高精度】【找规律】Gym - 101243B - Hanoi tower
题意:给你一个经典的汉诺塔递归程序,问你最少几步使得三个柱子上的盘子数量相同.(保证最开始盘子数量可以被3整除) 规律:ans(n)=2^(2*n/3-1)+t(n/3). t(1)=0. t(n)= ...
- 【树形dp】hdu6035 Colorful Tree
非常棒的题解,我就不复述了:http://blog.csdn.net/Bahuia/article/details/76141574 O(n) #include<cstdio> #incl ...
- 【数论】nefu118 n!后面有多少个0
就是求n!有多少个因子2和因子5,并在这两者中取较小者.因为必须要一个2和一个5才能拼出1个10. 显然2的数量多于5,因此只需要求n!有多少个因子5即可. n!中素因子p的个数= [n/p]+[n/ ...