beisen
#include <stdio.h>
#include <pthread.h>
#include <windows.h>
#define N 100
#define true 1
#define producerNum 10
#define consumerNum 5
#define sleepTime 1000 typedef int semaphore;
typedef int item;
item buffer[N] = {};
int in = ;
int out = ;
int proCount = ;
semaphore mutex = , empty = N, full = , proCmutex = ; void * producer(void * a){
while(true){
while(proCmutex <= );
proCmutex--;
proCount++;
printf("生产一个产品ID%d, 缓冲区位置为%d\n",proCount,in);
proCmutex++; while(empty <= ){
printf("缓冲区已满!\n");
}
empty--; while(mutex <= );
mutex--; buffer[in] = proCount;
in = (in + ) % N; mutex++;
full++;
Sleep(sleepTime);
}
} void * consumer(void *b){
while(true){
while(full <= ){
printf("缓冲区为空!\n");
}
full--; while(mutex <= );
mutex--; int nextc = buffer[out];
buffer[out] = ;//消费完将缓冲区设置为0 out = (out + ) % N; mutex++;
empty++; printf("\t\t\t\t消费一个产品ID%d,缓冲区位置为%d\n", nextc,out);
Sleep(sleepTime);
}
} int main()
{
pthread_t threadPool[producerNum+consumerNum];
int i;
for(i = ; i < producerNum; i++){
pthread_t temp;
if(pthread_create(&temp, NULL, producer, NULL) == -){
printf("ERROR, fail to create producer%d\n", i);
exit();
}
threadPool[i] = temp;
}//创建生产者进程放入线程池 for(i = ; i < consumerNum; i++){
pthread_t temp;
if(pthread_create(&temp, NULL, consumer, NULL) == -){
printf("ERROR, fail to create consumer%d\n", i);
exit();
}
threadPool[i+producerNum] = temp;
}//创建消费者进程放入线程池 void * result;
for(i = ; i < producerNum+consumerNum; i++){
if(pthread_join(threadPool[i], &result) == -){
printf("fail to recollect\n");
exit();
}
}//运行线程池
return ;
}
2
#include<stdio.h>
#include<stdlib.h>
#include<semaphore.h>
#include<pthread.h>
#include<unistd.h> #define NumOf_Producer 5 //the max num of producer
#define NumOf_Consumer 10 //the max num of consumer
#define Maxnum 10 // the max num of product
sem_t Empty_sem; //the goal of whether the num of product is null
sem_t Full_sem; //the goal of whether the num of product is equal to Maxnum pthread_mutex_t Mutex; //the goal of whether someone use the buff int Producer_id = ;
int Consumer_id = ;
int NowNumOfProduce = ;
void *Producer(void *arg) //the thread of producer
{
int id = Producer_id++;
while()
{
sleep(0.1);
sem_wait(&Full_sem); //when it comes to zero ,it means that the num of product is equal to Maxnum
pthread_mutex_lock(&Mutex); //lock the buff
NowNumOfProduce++;
printf("Producerthread %d product one,the num is:%d \n",id%NumOf_Producer,NowNumOfProduce);
pthread_mutex_unlock(&Mutex);
sem_post(&Empty_sem); //when it comes to ten ,it means there are ten products can be used by consumer
} return ((void *));
} void *Consumer(void *arg)
{
int id = Consumer_id++;
while()
{
sleep(0.2);
sem_wait(&Empty_sem);
pthread_mutex_lock(&Mutex);
NowNumOfProduce--;
printf("Consumerthread %d use product one,the num is:%d \n",id%NumOf_Consumer,NowNumOfProduce);
pthread_mutex_unlock(&Mutex);
sem_post(&Full_sem);
}
return ((void *));
} int main()
{
pthread_t Con[NumOf_Consumer];
pthread_t Pro[NumOf_Producer]; int temp1 = sem_init(&Empty_sem,,);
int temp2 = sem_init(&Full_sem,,Maxnum);
if(temp1&&temp2!=)
{
printf("sem init failed \n");
exit();
} int temp3 = pthread_mutex_init(&Mutex,NULL); if(temp3!=)
{
printf("Mutex init failed \n");
exit();
} for(int i= ;i<NumOf_Producer;i++)
{
int temp4 = pthread_create(&Pro[i],NULL,Producer,(void *)&i);
if(temp4!=)
{
printf("thread create failed !\n");
exit();
}
} for(int i=;i<NumOf_Consumer;i++)
{
int temp5 = pthread_create(&Con[i],NULL,Consumer,(void *)&i);
if(temp5!=)
{
printf("thread create failed !\n");
}
exit();
}
//destroy the thread
for(int i=;i<NumOf_Consumer;i++)
{
pthread_join(Con[i],NULL);
} for(int i=;i<NumOf_Producer;i++)
{
pthread_join(Pro[i],NULL);
} return ;
}
3
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<semaphore.h>
#include<pthread.h>
#define msleep(x) usleep(x*1000)
#define PRODUCT_SPEED 3 //生产速度
#define CONSUM_SPEED 1 //消费速度
#define INIT_NUM 3 //仓库原有产品数
#define TOTAL_NUM 10 //仓库容量 sem_t p_sem, c_sem, sh_sem;
int num=INIT_NUM; void product(void) //生产产品
{
sleep(PRODUCT_SPEED);
} int add_to_lib() //添加产品到仓库
{
num++;//仓库中的产品增加一个
msleep();
return num;
} void consum() //消费
{
sleep(CONSUM_SPEED);
} int sub_from_lib() //从仓库中取出产品
{
num--; //仓库中的产品数量减一
msleep();
return num;
} void *productor(void *arg) //生产者线程
{
while()
{
sem_wait(&p_sem);//生产信号量减一
product();// 生产延时
sem_wait(&sh_sem);//这个信号量是用来互斥的
printf("push into! tatol_num=%d\n",add_to_lib());
sem_post(&sh_sem);
sem_post(&c_sem); //消费信号量加一
}
} void *consumer(void *arg) //消费者线程
{
while()
{ sem_wait(&c_sem); //消费者信号量减一
sem_wait(&sh_sem);
printf("pop out! tatol_num=%d\n",sub_from_lib());
sem_post(&sh_sem);
sem_post(&p_sem);//生产者信号量加一
consum();//消费延时 }
} int main()
{
pthread_t tid1,tid2;
sem_init(&p_sem,,TOTAL_NUM-INIT_NUM); sem_init(&c_sem,,INIT_NUM); sem_init(&sh_sem,,); pthread_create(&tid1,NULL,productor,NULL);
pthread_create(&tid2,NULL,consumer,NULL); pthread_join(tid1,NULL);
pthread_join(tid2,NULL);
return ;
}
er
1https://www.cnblogs.com/Dzhouqi/p/3362259.html
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<semaphore.h>
#include<pthread.h>
#define msleep(x) usleep(x*1000)
#define PRODUCT_SPEED 3 //生产速度
#define CONSUM_SPEED 1 //消费速度
#define INIT_NUM 3 //仓库原有产品数
#define TOTAL_NUM 10 //仓库容量 sem_t p_sem, c_sem, sh_sem;
int num=INIT_NUM; void product(void) //生产产品
{
sleep(PRODUCT_SPEED);
} int add_to_lib() //添加产品到仓库
{
num++;//仓库中的产品增加一个
msleep();
return num;
} void consum() //消费
{
sleep(CONSUM_SPEED);
} int sub_from_lib() //从仓库中取出产品
{
num--; //仓库中的产品数量减一
msleep();
return num;
} void *productor(void *arg) //生产者线程
{
while()
{
sem_wait(&p_sem);//生产信号量减一
product();// 生产延时
sem_wait(&sh_sem);//这个信号量是用来互斥的
printf("push into! tatol_num=%d\n",add_to_lib());
sem_post(&sh_sem);
sem_post(&c_sem); //消费信号量加一
}
} void *consumer(void *arg) //消费者线程
{
while()
{ sem_wait(&c_sem); //消费者信号量减一
sem_wait(&sh_sem);
printf("pop out! tatol_num=%d\n",sub_from_lib());
sem_post(&sh_sem);
sem_post(&p_sem);//生产者信号量加一
consum();//消费延时 }
} int main()
{
pthread_t tid1,tid2;
sem_init(&p_sem,,TOTAL_NUM-INIT_NUM); sem_init(&c_sem,,INIT_NUM); sem_init(&sh_sem,,); pthread_create(&tid1,NULL,productor,NULL);
pthread_create(&tid2,NULL,consumer,NULL); pthread_join(tid1,NULL);
pthread_join(tid2,NULL);
return ;
}
2https://blog.csdn.net/qq_33783291/article/details/70147401
#include <iostream>
#include <string>
#include <cmath> using namespace std; const double PRECISION = 1E-;
const int COUNT_OF_NUMBER = ;
const int NUMBER_TO_BE_CAL = ;
double number[COUNT_OF_NUMBER];
string expression[COUNT_OF_NUMBER];
bool Judgement = false; //判断是否有解。
int count = ; void Search(int n)
{
if (n == )
{
if ( fabs(number[] - NUMBER_TO_BE_CAL) <= PRECISION ) //对于除法,要小心小数的精确位数
{
cout << expression[] << "\t\t";
Judgement = true;
count ++;
if((count % )==)
cout<<endl;
}
else
{ } } for(int i=; i < n; i++)
{
for (int j = i + ; j < n; j++)
{
double a, b;
string expa, expb;
a = number[i];
b = number[j];
number[j] = number[n - ]; //递归之后,n比以前小一位,所以可以不停向前赋值
expa = expression[i];
expb = expression[j];
expression[j] = expression[n - ]; //递归之后,n比以前小一位,所以可以不停向前赋值
expression[i] = '(' + expa + '+' + expb + ')'; //加法不需要分顺序
number[i] = a + b;
Search(n-);
expression[i] = '(' + expa + '-' + expb + ')'; //减法应该分顺序,减数以及被减数
number[i] = a - b;
Search(n-);
expression[i] = '(' + expb + '-' + expa + ')'; //减法应该分顺序,减数以及被减数
number[i] = b - a;
Search(n-);
expression[i] = '(' + expa + '*' + expb + ')'; //乘法不需要分顺序
number[i] = a * b;
Search(n-);
if (b != )
{
expression[i] = '(' + expa + '/' + expb + ')'; //除法应该分顺序,除数以及被除数
number[i] = a / b;
Search(n-);
}
if (a != )
{
expression[i] = '(' + expb + '/' + expa + ')'; //除法应该分顺序,除数以及被除数
number[i] = b / a;
Search(n-);
} number[i] = a; //这4句语句是为了防止如果上面几种可能都失败了的话,
number[j] = b; //就把原来的赋值撤消回去,以无干扰的正确的进入到下一次
expression[i] = expa; //for循环队列中。
expression[j] = expb; //
}
}
} int main()
{
cout<<"请依次输入4个数字:\n";
for (int i = ; i < COUNT_OF_NUMBER; i++)
{
char buffer[];
cout<<"第"<<i+<<"个卡片:";
cin >> number[i];
itoa(number[i], buffer, ); //itoa()函数的作用是把第一个参数(数值)传送到第二个参数(字符串)中去,第三个
//参数(int型)是该数值在字符串里以什么进制存放。
expression[i] = buffer;
}
cout<<endl;
Search(COUNT_OF_NUMBER) ;
if(Judgement==true)
{
cout << "\n成功" << endl;
cout<<"所以可以计算的次数总和 = "<<count<<endl;
}
else
{
cout << "失败" << endl;
}
system("pause");
return ;
}
3
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<semaphore.h>
#include<pthread.h>
#define msleep(x) usleep(x*1000)
#define PRODUCT_SPEED 3 //生产速度
#define CONSUM_SPEED 1 //消费速度
#define INIT_NUM 3 //仓库原有产品数
#define TOTAL_NUM 10 //仓库容量 sem_t p_sem, c_sem, sh_sem;
int num=INIT_NUM; void product(void) //生产产品
{
sleep(PRODUCT_SPEED);
} int add_to_lib() //添加产品到仓库
{
num++;//仓库中的产品增加一个
msleep();
return num;
} void consum() //消费
{
sleep(CONSUM_SPEED);
} int sub_from_lib() //从仓库中取出产品
{
num--; //仓库中的产品数量减一
msleep();
return num;
} void *productor(void *arg) //生产者线程
{
while()
{
sem_wait(&p_sem);//生产信号量减一
product();// 生产延时
sem_wait(&sh_sem);//这个信号量是用来互斥的
printf("push into! tatol_num=%d\n",add_to_lib());
sem_post(&sh_sem);
sem_post(&c_sem); //消费信号量加一
}
} void *consumer(void *arg) //消费者线程
{
while()
{ sem_wait(&c_sem); //消费者信号量减一
sem_wait(&sh_sem);
printf("pop out! tatol_num=%d\n",sub_from_lib());
sem_post(&sh_sem);
sem_post(&p_sem);//生产者信号量加一
consum();//消费延时 }
} int main()
{
pthread_t tid1,tid2;
sem_init(&p_sem,,TOTAL_NUM-INIT_NUM); sem_init(&c_sem,,INIT_NUM); sem_init(&sh_sem,,); pthread_create(&tid1,NULL,productor,NULL);
pthread_create(&tid2,NULL,consumer,NULL); pthread_join(tid1,NULL);
pthread_join(tid2,NULL);
return ;
} // 1.16.cpp : Defines the entry point for the console application.
// #include "stdafx.h"
#include <iostream>
#include<string>
#include "stdio.h"
#include <math.h>
using namespace std; const int CardsNumber = ;//24点有四张卡
const double ErrorThreshold=1E-;//由于舍入误差,需要加入一个误差阈值,误差在一定范围之内为,判断相等
const int ResultValue = ; #define N 4 string result[CardsNumber]={"","","",""};
double number[CardsNumber]={,,,};
bool PointsGame(int n)
{
if(n == )
{
//如果结果为24
//由于舍入误差,应允许一定范围内的误差 if( fabs(number[]-ResultValue)<ErrorThreshold)
{
cout<<result[]<<endl;
//cout<<'1'<<endl;
return true;
}
else
{
return false;
} } for(int i= ;i<n ;i++)
{
for(int j=i+;j<n;j++)
{
double a,b;
string expa,expb; a=number[i];
b=number[j];
number[j]=number[n-]; expa=result[i];
expb=result[j];
result[j]=result[n-]; result[i]='('+ expa +'+'+expb+')';
number[i]=a+b;
if(PointsGame(n-))
return true; result[i]='('+ expa +'-' + expb +')';
number[i]=a-b;
if(PointsGame(n-))
return true; result[i]='('+ expa + '*' + expb +')';
number[i]=a*b;
if(PointsGame(n-))
return true; if(b!=)
{result[i]='('+expa +'/'+ expb +')';
number[i]=a/b;
if(PointsGame(n-))
return true; } number[i]=a;
number[j]=b;
result[i]=expa;
result[j]=expb; }
} return false;
} int _tmain(int argc, _TCHAR* argv[])
{ PointsGame(); return ;
} #include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
using namespace std; int a1[],b1[]; void gol(char f,int k,int num)
{
if (f=='a') for(int i=k;i<=num;i++) a1[i-]=a1[i];
if (f=='b') for(int i=k;i<=num;i++) b1[i-]=b1[i];
} int cal(int a,int b,int num)
{
if (num==) return a+b;
if (num==) return a-b;
if (num==) return a*b;
if (num==) return a/b;
} string cha(int a)
{
string p;
p="";
while(a>)
{
p=(char)(a%)+p;
a/=;
}
return p;
} string chaf(int a)
{
if (a==) return "+";
if (a==) return "-";
if (a==) return "*";
if (a==) return "/";
} int main()
{
string ans[];
int a[],b[],i,anum,bnum;
for(i=;i<=;i++) cin >> a[i];
memset(b,,sizeof(b));
bool f[];
int s,j,d[],ansnum;
while(b[]==)
{
/*for(i=1;i<=3;i++)
{
cout << b[i] << " ";
}*/
//cout << endl;
memset(f,,sizeof(f));
s=;
for(i=;i<=;i++)
{
if (b[i]== || b[i]==)
{
if (b[i-]== || b[i-]== || b[i+]== || b[i+]==)
{
s++;
d[s]=i;
}
}
}
while(f[]==)
{
for(i=;i<=s;i++)
{
cout << f[i] << " ";
}
cout << endl;
for(i=;i<=;i++) a1[i]=a[i];
for(i=;i<=;i++) b1[i]=b[i];
anum=;bnum=;
for(i=;i<=;i++) ans[i]="";
ansnum=;
j=;
while(j<=bnum)
{
if (f[j]==)
{
ansnum++;
ans[ansnum]=cha(a1[d[j]])+chaf(b1[d[j]])+chaf(a1[d[j]+])+"=";
a1[d[j]]=cal(a1[d[j]],a1[d[j]+],b1[d[j]]);
ans[ansnum]+=cha(a1[d[j]]);
gol('a',d[j]+,anum);
anum--;
gol('b',d[j]+,bnum);
bnum--;
}
j++;
}
j=;
//cout << anum << " " << bnum << endl;
while(j<=bnum)
{
if (b[j]== || b[j]==)
{
ansnum++;
ans[ansnum]=cha(a1[j])+chaf(b1[j])+chaf(a1[j+])+"=";
a1[j]=cal(a1[j],a1[j+],b1[j]);
ans[ansnum]+=cha(a1[j]);
gol('a',j+,anum);
anum--;
gol('b',j+,bnum);
bnum--;
}
j++;
}
//cout << anum << " " << bnum << endl;
j=;
while(j<=bnum)
{
ansnum++;
ans[ansnum]=cha(a1[j])+chaf(b1[j])+chaf(a1[j+])+"=";
a1[j]=cal(a1[j],a1[j+],b1[j]);
ans[ansnum]+=cha(a1[j]);
gol('a',j+,anum);
anum--;
gol('b',j+,bnum);
bnum--;
}
//cout << anum << " " << bnum << endl;
//cout << a1[1] << endl;
if (a1[]==)
{
for(j=;j<=ansnum;j++)
{
cout << ans[j] << endl;
}
return ;
}
j=s;
while(f[j]==)
{
f[j]==;
j--;
}
f[j]=;
}
//cout << "---------------\n";
i=;
while(b[i]==)
{
b[i]=;
i--;
}
b[i]++;
}
} #include <iostream>
#include <string>
#include <cmath> using namespace std; const double PRECISION = 1E-;
const int COUNT_OF_NUMBER = ;
const int NUMBER_TO_BE_CAL = ;
double number[COUNT_OF_NUMBER];
string expression[COUNT_OF_NUMBER];
bool Judgement = false; //判断是否有解。
int count = ; void Search(int n)
{
if (n == )
{
if ( fabs(number[] - NUMBER_TO_BE_CAL) <= PRECISION ) //对于除法,要小心小数的精确位数
{
cout << expression[] << "\t\t";
Judgement = true;
count ++;
if((count % )==)
cout<<endl;
}
else
{ } } for(int i=; i < n; i++)
{
for (int j = i + ; j < n; j++)
{
double a, b;
string expa, expb;
a = number[i];
b = number[j];
number[j] = number[n - ]; //递归之后,n比以前小一位,所以可以不停向前赋值
expa = expression[i];
expb = expression[j];
expression[j] = expression[n - ]; //递归之后,n比以前小一位,所以可以不停向前赋值
expression[i] = '(' + expa + '+' + expb + ')'; //加法不需要分顺序
number[i] = a + b;
Search(n-);
expression[i] = '(' + expa + '-' + expb + ')'; //减法应该分顺序,减数以及被减数
number[i] = a - b;
Search(n-);
expression[i] = '(' + expb + '-' + expa + ')'; //减法应该分顺序,减数以及被减数
number[i] = b - a;
Search(n-);
expression[i] = '(' + expa + '*' + expb + ')'; //乘法不需要分顺序
number[i] = a * b;
Search(n-);
if (b != )
{
expression[i] = '(' + expa + '/' + expb + ')'; //除法应该分顺序,除数以及被除数
number[i] = a / b;
Search(n-);
}
if (a != )
{
expression[i] = '(' + expb + '/' + expa + ')'; //除法应该分顺序,除数以及被除数
number[i] = b / a;
Search(n-);
} number[i] = a; //这4句语句是为了防止如果上面几种可能都失败了的话,
number[j] = b; //就把原来的赋值撤消回去,以无干扰的正确的进入到下一次
expression[i] = expa; //for循环队列中。
expression[j] = expb; //
}
}
} int main()
{
cout<<"请依次输入4个数字:\n";
for (int i = ; i < COUNT_OF_NUMBER; i++)
{
char buffer[];
cout<<"第"<<i+<<"个卡片:";
cin >> number[i];
itoa(number[i], buffer, ); //itoa()函数的作用是把第一个参数(数值)传送到第二个参数(字符串)中去,第三个
//参数(int型)是该数值在字符串里以什么进制存放。
expression[i] = buffer;
}
cout<<endl;
Search(COUNT_OF_NUMBER) ;
if(Judgement==true)
{
cout << "\n成功" << endl;
cout<<"所以可以计算的次数总和 = "<<count<<endl;
}
else
{
cout << "失败" << endl;
}
system("pause");
return ;
}
https://www.cnblogs.com/hnrainll/archive/2011/04/21/2024089.html
beisen的更多相关文章
- 前端工具 & git笔记
git diff (working dir to INDEX ) git diff --cached (INDEX to HEAD) git diff HEAD (working dir t ...
- .NET开发的大型网站列表、各大公司.NET职位精选,C#王者归来
简洁.优雅.高效的C#语言,神一样的C#创始人Anders Hejlsberg,async/await编译器级异步语法,N年前就有的lambda表达式,.NET Native媲美C++的原生编译性能, ...
- Selenium定位元素
Commands (命令) Action对当前状态进行操作失败时,停止测试 Assertion校验是否有产生正确的值 Element Locators指定HTML中的某元素 Patterns用于模式匹 ...
- 2018年4月更新70多个公司dnc招聘职位
2018年4月更新70多个公司dnc招聘职位 请在本页回复,补充dnc招聘信息.公司案例 dnc简介 dnc = .NET Core.dotnet Core简写 dnc是微软新一代主力编程平台,开源. ...
- 9、Docker私有registry
Docker Registry分类 Docker 默认是使用https的,但是如果在自己得私有局域网中,你指明使用http也是可以的. Registry主要的作用是托管镜像: 运行docker reg ...
- 5、Docker容器网络
使用Linux进行IP层网络管理的指 http://linux-ip.net/html/ # yum install iproute http://linux-ip.net/html/tool ...
- 3、Docker镜像管理基础
Docker image # docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE redis -alpine 23d561d12e92 d ...
- 2018 dnc .NET Core、.NET开发的大型网站列表、各大公司.NET职位精选,C#王者归来
简洁.优雅.高效的C#语言,神一样的C#创始人Anders Hejlsberg,async/await编译器级异步语法,N年前就有的lambda表达式,.NET Native媲美C++的原生编译性能, ...
- 大话设计模式--DI(依赖注入)
1.背景 想象一个场景:有个功能通过某个参数决定了路由到不同的方法上或者几个方法模块可以自由搭配,咋办?一般人会对每个方法写一个helper(比如SendMessageForEmail.SendMes ...
随机推荐
- Spring Cloud (2) 服务消费者-基础
LoadBalancerClient 使用Spring Cloud提供的负载均衡器客户端来实现服务的消费. 首先创建一个服务消费者工程,命名为com.david.consumer,并在pom.xml中 ...
- 在PL/SQL中使用游标、动态sql和绑定变量的小例子
需求:查询并输出30号部门的雇员信息 方式一:使用 loop...fetch SET serveroutput ON; DECLARE CURSOR c_emp IS ; v_emp emp%rowt ...
- 关于VM虚拟机在使用网络时与锐捷网络冲突的解决问题
在使用NAT网络模式的时候,锐捷会因为冲突强制关闭NAT服务,导致虚拟机无法上网,解决的办法是让NAT服务一直保持启动,写一个bat脚本来一直检测服务是否在运行,并且进行启动操作. 当不需要用虚拟机的 ...
- [转]VIM字符替换
语法为 :[addr]s/源字符串/目的字符串/[option] 全局替换命令为::%s/源字符串/目的字符串/g [addr] 表示检索范围,省略时表示当前行. 如:"1,20" ...
- MVC POST请求后执行javascript代码
[HttpPost] public ActionResult PostTest() { //你的业务代码 //...... //要执行的js string js = "window.loca ...
- 详解CorelDRAW智能填充工具的运用
使用智能填充工具可以为任意的闭合区域填充颜色并设置轮廓.与其他填充工具不同,智能填充工具仅填充对象,它检测到区域的边缘并创建一个闭合路径,因此可以填充区域.例如,智能填充工具可以检测多个对象相交产生的 ...
- 微信小程序跳转以及跳转的坑
一.首先小程序的跳转方法有一下几种 js控制跳转 // 保留当前页面,跳转到应用内的某个页面 wx.navigateTo({ url: '../blueberry/blueberry' }); // ...
- C#连接Oracle数据库的方法(System.Data.OracleClient、Oracle.DataAccess.Client也叫ODP.net、Oracle.ManagedDataAccess.dll)
官方下载地址(ODP.net)(中文):http://www.oracle.com/technetwork/cn/topics/dotnet/downloads/index.html 官方下载地址(O ...
- Django MVC与MTV概念 Ajax、分页实现
MVC与MTV概念 MTV与MVC(了解) MTV模型(django): M:模型层(models.py) T:templates ...
- C#第十四节课
函数的调用 using System;using System.Collections.Generic;using System.Linq;using System.Text;using System ...