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程序的步骤 第一步: ...
随机推荐
- 【cocos2d-js网络教程篇】cocos2d-js http网络请求
前言 刚入手cocos2d-js,看到网上的JS的http网络请求,大部分都是错的.原因在于,js-tests里面的网络请求实例没有给出加载完成事件.正确的加载完成事件如下: var xhr = cc ...
- 洛谷——P1724 东风谷早苗
P1724 东风谷早苗 题目描述 在幻想乡,东风谷早苗是以高达控闻名的高中生宅巫女.某一天,早苗终于入手了最新款的钢达姆模型.作为最新的钢达姆,当然有了与以往不同的功能了,那就是它能够自动行走,厉害吧 ...
- POJ2234 Matches Game 尼姆博弈 博弈论
http://poj.org/problem?id=2234 尼姆博弈(Nimm's Game) 指的是这样一个博弈游戏:有任意堆物品,每堆物品的个数是任意的,双方轮流从中取物品,每一次只能从一堆物品 ...
- poj 1348 Period(KMP)
Period Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...
- bzoj 2038 小Z的袜子(hose)(莫队算法)
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 11542 Solved: 5166[Sub ...
- BZOJ 4443 [Scoi2015]小凸玩矩阵(二分答案+二分图匹配)
[题目链接]http://www.lydsy.com/JudgeOnline/problem.php?id=4443 [题目大意] 从矩阵中选出N个数,其中任意两个数字不能在同一行或同一列 求选出来的 ...
- 【推导】【DFS】Codeforces Round #429 (Div. 1) B. Leha and another game about graph
题意:给你一张图,给你每个点的权值,要么是-1,要么是1,要么是0.如果是-1就不用管,否则就要删除图中的某些边,使得该点的度数 mod 2等于该点的权值.让你输出一个留边的方案. 首先如果图内有-1 ...
- 【二分】【线段树】hdu6070 Dirt Ratio
size(l,r)表示区间l,r权值的种类数,让你求min{size(l,r)/(r-l+1)}(1<=l<=r<=n). last[r]表示a[r]上一次出现的位置, 就是二分验证 ...
- 【带权并查集】【离散化】vijos P1112 小胖的奇偶
每个区间拆成r和l-1两个端点,若之内有偶数个1,则这两个端点对应的前缀的奇偶性必须相同,否则必须相反. 于是可以用带权并查集维护,每个结点储存其与其父节点的奇偶性是否相同,并且在路径压缩以及Unio ...
- bzoj 1433: [ZJOI2009]假期的宿舍
1433: [ZJOI2009]假期的宿舍 Description Input Output Sample Input 1 3 1 1 0 0 1 0 0 1 1 1 0 0 1 0 0 Sample ...