多线程编程中,2个线程同时调用一个存储过程…………

最近自学的时候遇到了这么一个问题……
要求是这样的:
1.在数据库中新建一个用户状态表。里面包含2个字段。user_status(userid bigint,status int)
userid为自增。
status默认为0;
插入1000条记录。

2.写一个存储过程,从user_status表中获取一条status=0的userid字段的值,取出userid时,需要同时把这条记录对应的status从0修改为1.

3.开启2个线程,在线程中循环调用第2步中的存储过程,直到user_status表中记录全部取完(即status全部为1)。要求:在2个线程中取出的userid不能重复。并把取出的userid,打印到某个文件中,一行一个userid

第一点,没啥问题吧应该,我在数据库里建好了。

第二点的话,我写的存储过程是:

create procedure sp_getuserid
as
declare @userid int
select top 1 @userid=userid from user_status where status=0 order by newid()
update user_status set status=1 where status=0 and userid =@userid
select userid from user_status where userid=@userid

第三点的代码:

public class Status implements Runnable {
    private int num;
    @Override
    public void run() {
        Boolean flag = true;
        while(flag)
        {
            flag=this.writeFile(this.getUserid());
        }
    }
    @SuppressWarnings("unchecked")
    public List<UserBean> getUserid() {
        // 创建数据库连接
        Connection conn = ConnectDb.Connect();
        QueryRunner qRunner = new QueryRunner();
        List<UserBean> list = new ArrayList<UserBean>();
        try {
            list = qRunner.query(conn, "exec sp_getuserid",
                    new BeanListHandler(UserBean.class));
        } catch (Exception e) {
            e.printStackTrace();
        }
        DbUtils.closeQuietly(conn);
        return list;
    }
    public Boolean writeFile(List<UserBean> list) {
        if (list.size()==0)
            return false;
        else {
            try {
                File file = new File("d:/test.txt");
                if (!file.exists())
                    file.createNewFile();
                FileOutputStream out = new FileOutputStream(file, true);
                for (int i = 0; i < list.size(); i++) {
                    StringBuffer sb = new StringBuffer();
                    SimpleDateFormat df = new SimpleDateFormat(
                            "yyyy-MM-dd HH:mm:ss:SSS");
                    sb.append(df.format(new Date()) + " \t"
                            + list.get(i).getUserid()+ " \t"+this.getNum());
                    sb.append(System.getProperty("line.separator"));
                    out.write(sb.toString().getBytes("utf-8"));
                }
                out.close();
                return true;
            } catch (Exception e) {
                e.printStackTrace();
                return true;
            }
        }
    }
    public static void main(String[] args) {
        new Thread(new Status(1)).start();
        new Thread(new Status(2)).start();
    }
    public Status(int num)
    {
        this.num=num;
    }

}

可是到最后,我不能在txt里得到1000条数据,总是缺少一些条目,但是数据库里却更新了……

如果我把存储过程改为

create procedure sp_getuserid
as
Begin TransAction
declare @userid int
declare @errno int
set @errno=0 
select top 1 @userid=userid from user_status where status=0 order by newid()
set @errno=@errno+@@error
update user_status set status=1 where status=0 and userid =@userid
set @errno=@errno+@@error
select userid from user_status where userid=@userid
set @errno=@errno+@@error
If @errno>0 
Begin 
rollback TransAction 
end 
Else
Begin 
Commit TransAction
End 

这样运行又会报死锁错误……
好吧,多线程的问题和存储过程不怎么会啊,求指教啊!!

3个回答

我们在这样的情况是这样的
一:在表中新增一个job字段,这个job取序列号;
二:每次执行存储过程时先获取一个序列,并且写在要操作数据的那个表中;
三:做完步骤二的更新后用这个job查询出这个序列的数据进行业务;
四:做完业务后,将job的数据更新为空.

另外有个重置的行程,更新job在处理时有挂死或者超时的情况,比如你的job不为空,但是status一直还是0.过了一个小时还是这样,就必须重置了
这样每个job处理的数据全都是自己的数据.希望给你帮助

主要是存储过程写得不好,没有做事务控制,可以考虑这样:
1、存错过程:
在存储过程中使用游标,Select ... For Update,这样游标操作当前行时,可以锁定;然后利用游标来更新字段即可,最后也是返回游标的userid;记得用完了要关闭游标;

2、单句执行:
UPDATE user_status SET status=1
OUTPUT INSERTED.userid
WHERE userid = (
Select top 1 userid from user_status where status=0
)
要用PrepareStatement执行,注册好返回参数,具体请咨询Google。

我的这个是java+mysql 第二个问题

DROP PROCEDURE IF EXISTS sp_status_change1;//删除之前存储过程
DELIMITER $$

CREATE PROCEDURE sp_status_change1()
BEGIN
declare maxid int;#定义变量最大的id
declare num int;
set @uid=1; #当前的id从0开始
select MAX(userid) INTO maxid from user_status;#当前数据库中最大的id赋值给maxid
SELECT userid FROM user_status where STATUS =0;
while @uid<= maxid do #遍历查询,当前uid小于总数时,
SELECT count(*)INTO num FROM user_status where STATUS =0 and USERID= @uid;
if 1=num then
UPDATE user_status
SET STATUS=1
where USERID= @uid;
END IF;
set @uid=@uid+1;
end while;
END$$
DELIMITER ;

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
使用phtread多线程编程程序来生成Fibonacci序列 c/c++

请用c/c++实现以下内容:(多线程) Fibonacci序列是一组:0,1,1,2,3,5,8,…… fib0=0; fib1=1; fibn=fibn-1+fibn-2; 使用phtread多线程编程程序来生成Fibonacci序列。程序应该这样工作:用户运行程序时,在命令行输入要产生Fibonaci序列数,然后程序创建一个新的线程来产生Fibonacci数,把这个序列放到线程共享的数据中(数组可能是一种最方便的数据结构)。当线程执行完成后,父线程将输出子线程产生的序列。由于在子线程结束前,父线程不能开始输出Fibonacci序列,因此,父线程需要等子线程结束。

c++关于多线程调用一个类中方法

目前写了一个多线程项目,由多个子项目组成,目前想在同步子线程中访问一个类中的初始化com口方法,但是线程可能同时进入初始化方法导致crash,想设置一个锁但是取到的 句柄地址都不一样无法上锁,请问这种情况要怎样实现

多线程同时调用同一个方法读取不同对象数据怎么确保多线程线程执行完之后在执行其他逻辑。

比如说有100个电表,我要读取电表的读数,我创建100个线程,都调用同一个读取参数的方法,怎么让他在读完所有电表的读数后在执行后面的其他代码。如何实现我说的这种场景,面试时被问到的

linux多线程编程中如何等待过个线程退出

linux多线程编程中,如果线程A创建了线程B,我知道用pthread__ join可以令线程A 阻塞然后等待线程B的退出。如果线程A创建了三个线程B,C,D,执行完的先后顺序不知。想让A必须等待三个线程都退出后再退出,应该怎么做? 连用pthread__join三次吗???但是第一次用了pthread__join后,A不就阻塞了吗?

小白请大家给一点思路,关于c#多线程编程

我有这样一项任务,在一个文件夹里面有一堆数据文件,我需要一个一个拿出来进行计算,并把计算结果显示在表格里。由于需要计算的数据文件非常多,且对每一个文件的计算操作需要6秒左右的时间,所以我想创建多个线程去同时计算。现在有以下疑问: 1、如何让多个线程在文件夹里面取的文件不重复,即取过的就不再取。2、每个线程计算的结果都会最终在同一个表里面显示,如何做到多个线程访问这个表格不冲突。3、如何让每个线程在一次完整的计算过程之后(取数据文件——计算——表格显示),又自动去文件夹取下一个数据文件,进行下一轮计算。 第一次用到多线程,确实很蒙,请各位指点一下,谢谢!

关于操作系统多线程编程

10个洗碗工在池子里洗澡,池子只能容下5个人同时洗,每个人每次洗碗的时间在30-50秒之间随机,每个洗碗工就是不停的取碗然后去池子洗碗,如此循环。如果池子里已经有5个人了,其他的洗碗工就只能等池子里有空位了才能去洗碗。 支持随时查看每个洗碗工的统计数据,包括洗了多少个碗,在池子里花费的平均时间,以及在池子外等待的平均时间。 希望高手给出编程解答或者相关的编程例子,或者流程图。要求用c语言实现,如果是linux多线程解决就最好了!

java如何开启两个线程后同时调用一个类的方法

不分先后顺序,是同时调用,怎么写。

linux C/C++ 多线程编程开启线程的方式

在网上查阅资料的时候,看到关于开启线程的方式有很多种, windows平台和linux平台各不相同, 比如说linux下会用到pthread, 我的问题是,C++标准里面不是提供了标准线程库std::thread,为什么不使用它,以便于跨平台编程呢? 恳请各位指教!

socket编程多线程文件传输

要实现的是开多线程传输一个文件,目的是提高传输速度。 思路是这样的:服务端开多线程,将文件分割,一个线程传输一块,客户端也开多线程,每个线程接受一块,最后拼成一个完整的文件。服务端支持多线程, 客户端要支持多线程, 然后客户端每个线程都建立连接到服务端请求一个文件的某个分片。 希望大家可以提供一下类似的代码,现在只有思路不知道怎么下手。

我的动态库被别人使用多线程调用,我单线程调用了一个别人写的动态库,我调的这个库需不需要支持可重入

【c++】求大神回复,我的动态库被别人使用多线程调用,我单线程调用了一个别人写的动态库,我调的这个库需不需要支持可重入,要不要加锁保护?我调的库,我把它当一个函数使用,它里面也挺复杂的,好多全局变量。

并发调用oracle存储过程

CREATE OR REPLACE PROCEDURE MAN_ACCOUNT_MRGREDATE_INSERT (v_sellerid in varchar2, v_professtype in varchar2, v_plattype in varchar2, v_margin in varchar2, v_saleamount in varchar2, v_priceamount in varchar2, v_serviceCharge in varchar2, v_creditDate in varchar2, v_refundAmount in varchar2, v_return_code out varchar2) is l_marginid man_act_margin_record.marginid%type; l_count number; --l_sellerid man_act_margin_record.sellerid%type; begin --v_return_code := '0000'; select count(*) into l_count from man_act_margin_record m where m.credit_date = to_date(v_creditDate,'yyyy-MM-dd') and m.sellerid = v_sellerid and m.professtype = v_professtype and m.plattype = v_plattype; --记录已存在,直接返回入库成功 if l_count>0 then delete from man_act_margin_record m where m.credit_date = to_date(v_creditDate,'yyyy-MM-dd') and m.sellerid = v_sellerid and m.professtype = v_professtype and m.plattype = v_plattype; -- 生成主键 select 'M'||to_char(sysdate, 'yymmddhh24miss') || trim(to_char(SEQ_MAN_ACT_MARGIN_RECORD.nextval, '000000')) into l_marginid from dual; insert into man_act_margin_record (marginid, sellerid, professtype, plattype, margin, saleamount, priceamount, service_charge, credit_date, create_date, refund_amount) values (l_marginid, v_sellerid, v_professtype, v_plattype, v_margin, v_saleamount, v_priceamount, v_serviceCharge, to_date(v_creditDate, 'yyyy-MM-dd'), sysdate, v_refundAmount ); v_return_code := '0000'; else -- 生成主键 select 'M'||to_char(sysdate, 'yymmddhh24miss') || trim(to_char(SEQ_MAN_ACT_MARGIN_RECORD.nextval, '000000')) into l_marginid from dual; insert into man_act_margin_record (marginid, sellerid, professtype, plattype, margin, saleamount, priceamount, service_charge, credit_date, create_date, refund_amount) values (l_marginid, v_sellerid, v_professtype, v_plattype, v_margin, v_saleamount, v_priceamount, v_serviceCharge, to_date(v_creditDate, 'yyyy-MM-dd'), sysdate, v_refundAmount ); v_return_code := '0000'; end if; commit; exception when others then v_return_code := '1111'; rollback; raise; end; 我在java代码中并发调用该存储过程,并用log4j打印调用日志,日志显示成功调用2566次,并成功插入到目标表中,但是在oracle实际查询时,数据量却少了100多条,而且每次执行程序,数据量少的数目都不一样。关键是,程序未报异常。 在我的程序中,嵌套两个多线程,第一个是生产者消费者模式(多线程),即同时生产出多个实例,消费者并发,在某个消费者中,又并发多个线程,去调用上面的存储过程。 通过日志初步判断,每个线程都进了存储过程,但是有些并没有执行完存储过程,并返回成功代码'0000',导致了上述的结果。 有oracle大牛,帮忙看看什么问题,不胜感激。

关于Java进度条多线程调用问题,一个很实用的问题,希望熟悉多线程编程的高手看看

目前我在做一个C/S架构的Java应用,其中有一项查询操作非常耗时,可以增加个进度条以提高用户界面友好型.大体流程是这样的,在一个方法内 protected void action_queryButton()实行一个耗时的查询操作ArrayList alQuery = BuinessLogic.getQuery(); 此操作非常耗时,我把它抽出来放到一个线程中去做,具体是:先写个QueryDialog继承于JDialog,上面加入JProgressBar进度条,在初始化QueryDialog的过程中启动线程做费时查询,期间不断将查询进度消息返回给JDialogProgress中的 JProgressBar(这样用户可以看到进度条在不断刷新往前跑),最后查询结束,返回查询结果集alQuery(是一个ArrayList对象). 这一切都已实现,关键问题是当我启动线程执行费时查询操作时,主线程也继续往下执行,我的线程还没来得及返回结果集,主线程已经 将一个空引用赋给result了(ArrayList result = alQuery;)等我线程返回时,一切晚矣~~~主线程继续往下执行(当然会抛个空指针异常,呵呵)...我的最终目的也就没有达到.我的目的是让线程去执行费时操作,同时界面显示进度条不断刷新,等费时查询结束,进度条跑到100%,然后返回结果集给主线程下一行的ArrayList引用对象 result,这样我才算真正完成任务,事与愿违啊,线程启动后,主线程继续往下走,没有完成任务交接.实例伪代码我附上了, protected ArrayList action_queryButton() { //主线程开始 . . . . // 新建查询对话框 QueryDialog queryDialog = new QueryDialog(topFrame, this.managerContext); // 打开对话框:注意,我开始启动费时查询线程了.线程start方法我封装在queryDialog.showDialog(queryParam, iFrame)方法里,具体代码这 //里不提供了. if (queryDialog.showDialog(queryParam, iFrame) != queryDialog.OPTION_OK) { // 用户取消 或者 异常 queryDialog.dispose(); queryDialog = null; return; } /*获得查询参数:注意我上面开启了个线程,当线程还没结束,也就是说还没返回查询结果集时,主线程继续往下走,执行了下步操作调getQuery方法得到一个ArrayList空对象(因为此时线程没有走完,不可能返回真实查询结果),系统会抛个空指针*/ ArrayList result = queryDialog.getQuery(); setQueryManagerContext(tempParam); queryDialog.dispose(); queryDialog = null; // . . . . return result; } 我的解决方法是在开启查询线程后,让主线程停止不动,不让它往下走,等待查询结束QueryDialog对象返回查询结果集后,再让主线程继续下一步 ArrayList result = queryDialog.getQuery();这样,result就有值了,一切都OK. 请问谁有更好的解决办法? 如果不方便给出代码,说出思路也行,说错没关系,大家一起探讨共同进步嘛,呵呵.

求推荐JAVA 多线程编程书籍

求推荐JAVA 多线程编程书籍

MFC循环创建多线程同时处调用同一函数读写文本和excel操作

CString fname[3000]; CString name[1024] ; int j1 ; int nIndex = 0; void CDisposeXJXDlg::OnBtnSelSrcFile() { // TODO: Add your control notification handler code here CFileDialog dlg(TRUE, NULL, NULL ,OFN_HIDEREADONLY| OFN_OVERWRITEPROMPT |OFN_ALLOWMULTISELECT,"(*.tmp) | *.tmp||",AfxGetMainWnd()); TCHAR* pszFile =new TCHAR[MAX_PATH]; memset(pszFile,0,sizeof(TCHAR)*MAX_PATH); dlg.m_ofn.lpstrFile = pszFile ; if(IDOK==dlg.DoModal()) { int i = 0 ; POSITION pos ; //把起始位置赋给pos pos = dlg.GetStartPosition(); //把打开的多个文件名赋给fname数组 while(pos!=NULL) { fname[i] = dlg.GetNextPathName(pos); name[i] = fname[i].Right(fname[i].GetLength()-fname[i].ReverseFind('\\')-1); m_ListOutInfo.AddString(name[i]); i++ ; } } } int t=0 ; int tt = 0 ; int TheradsCount = 0; int j2 = 0; int j3 = 0; CWinThread* pThread[MAX_THREADS]; void CDisposeXJXDlg::OnBtnTypeset() { GetDlgItem(IDC_BTN_TYPESET)->EnableWindow(FALSE); TheradsCount = m_ListOutInfo.GetCount(); j2 = TheradsCount ; for(int m1=0 ;j2<MAX_THREADS? m1<j2 :m1<MAX_THREADS ;m1++) { pThread[m1] =AfxBeginThread(CDisposeXJXDlg::ThreadFun,this,THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED); pThread[m1]->ResumeThread(); } } UINT CDisposeXJXDlg::ThreadFun(LPVOID pParam) { CDisposeXJXDlg* dlg=(CDisposeXJXDlg*)pParam; WaitForSingleObject(semaphoreWrite.m_hObject,INFINITE); dlg->m_strFbdPath = fname[t]; dlg->StartDispose(fname[t]); delete []dlg ; Sleep(100) ; t++ ; ReleaseSemaphore(semaphoreWrite.m_hObject,1,NULL); return 0 ; } 这是我自己写的,在MFC对话框里添加了一个列表框,打开多个文本然后点击按钮执行OnBtnTypeset()函数,最后想通过创建多个线程,同时调用StartDispose(fname[t])来处理多个文本和处理EXCEL,做了几天了出来的结果就是线程只能按队列执行,文本读取或EXCEl处理一两个对话框就结束了或者内存泄露,完全达不到任务要求, 求大神们给指点,真心求教....谢谢了!

mfc循环创建的多线程A去调用了另外一个线程B,其中A线程出问题要退出。

mfc循环创建的多线程A去调用了另外一个线程B,其中A的一个线程出问题要退出。B线程怎么也终止了 怎么办? 用的是下面这个。 // 资源释放结束,可退出线程并析构类 pMg->m_ExitThread.SetEvent();

Java一个线程对另一个线程实现控制运行和终止,但不影响两个线程的独立运行?

准备做一个带界面(例使用swing或者javaFX)的定时器, 因为界面相当于开了一个线程我们默认为线程A,计时器倒计时的线程为线程B 线程A负责监听界面的事件,以此来决定线程B的执行和终止 方案一:线程A中监听到事件直接调用线程B,此时线程A会挂起,整个界面需要等线程B完成才能有响应,无法中途终止计时 方案二:线程A与线程B相互wait和Notify实现来回切换,这样计时会不准确 所以怎么样才能在界面决定开始计时后,线程B能默默计时,同时界面仍然可以对线程B实现停止的操作???

多线程编程加锁时机问题

多线程编程时,经常要加锁,请问如何加锁呢?加锁的时机又如何选择呢?可以给出一个例子吗

请问下,怎么样实现一个线程来调用控制多个线程的执行

在C# Winfrom项目中,有一个主窗体(mainfrom)和三个子窗体(subfrom1、subfrom2、subfrom3). 在主窗体(mainfrom)中有一个进程(用来控制调用三个子窗体中的进程)。在三个子窗体中分别各有一个进程(用于控制执行各自子窗体中的任务)。 请问怎么样实现在主窗体中的进程来控制调用三个子窗体中进程的执行,可以动态控制调用这三个子窗体中的进程的执行。 有没有相关的DEMO或参考资料,谢谢。

MFC跨线程调用另一个线程函数执行的函数

MFC跨线程调用另一个线程函数执行的函数,怎么得到函数的返回值呢?函数名转换函数值

YOLOv3目标检测实战:训练自己的数据集

YOLOv3目标检测实战:训练自己的数据集

150讲轻松搞定Python网络爬虫

150讲轻松搞定Python网络爬虫

实用主义学Python(小白也容易上手的Python实用案例)

实用主义学Python(小白也容易上手的Python实用案例)

我说我不会算法,阿里把我挂了。

不说了,字节跳动也反手把我挂了。

立方体线框模型透视投影 (计算机图形学实验)

计算机图形学实验 立方体线框模型透视投影 的可执行文件,亲测可运行,若需报告可以联系我,期待和各位交流

2019 AI开发者大会

2019 AI开发者大会

组成原理课程设计(实现机器数的真值还原等功能)

实现机器数的真值还原(定点小数)、定点小数的单符号位补码加减运算、定点小数的补码乘法运算和浮点数的加减运算。

C/C++跨平台研发从基础到高阶实战系列套餐

一 专题从基础的C语言核心到c++ 和stl完成基础强化; 二 再到数据结构,设计模式完成专业计算机技能强化; 三 通过跨平台网络编程,linux编程,qt界面编程,mfc编程,windows编程,c++与lua联合编程来完成应用强化 四 最后通过基于ffmpeg的音视频播放器,直播推流,屏幕录像,

MFC一站式终极全套课程包

该套餐共包含从C小白到C++到MFC的全部课程,整套学下来绝对成为一名C++大牛!!!

软件测试2小时入门

软件测试2小时入门

三个项目玩转深度学习(附1G源码)

三个项目玩转深度学习(附1G源码)

计算机图形学-球的光照模型课程设计

计算机图形学-球的光照模型,有代码完美运行,有课程设计书

Linux常用命令大全(非常全!!!)

Linux常用命令大全(非常全!!!) 最近都在和Linux打交道,感觉还不错。我觉得Linux相比windows比较麻烦的就是很多东西都要用命令来控制,当然,这也是很多人喜欢linux的原因,比较短小但却功能强大。我将我了解到的命令列举一下,仅供大家参考: 系统信息 arch 显示机器的处理器架构 uname -m 显示机器的处理器架构 uname -r 显示正在使用的内核版本 d...

因为看了这些书,我大二就拿了华为Offer

四年了,四年,你知道大学这四年我怎么过的么?

深度学习原理+项目实战+算法详解+主流框架(套餐)

深度学习系列课程从深度学习基础知识点开始讲解一步步进入神经网络的世界再到卷积和递归神经网络,详解各大经典网络架构。实战部分选择当下最火爆深度学习框架PyTorch与Tensorflow/Keras,全程实战演示框架核心使用与建模方法。项目实战部分选择计算机视觉与自然语言处理领域经典项目,从零开始详解算法原理,debug模式逐行代码解读。适合准备就业和转行的同学们加入学习! 建议按照下列课程顺序来进行学习 (1)掌握深度学习必备经典网络架构 (2)深度框架实战方法 (3)计算机视觉与自然语言处理项目实战。(按照课程排列顺序即可)

fakeLocation13.5.1.zip

fakeLocation13.5.1 虚拟定位 ios13.5.1的最新驱动下载,iPhone/iPad免越狱虚拟定位工具Location-cleaned驱动已更新

UnityLicence

UnityLicence

Python可以这样学(第一季:Python内功修炼)

Python可以这样学(第一季:Python内功修炼)

Python+OpenCV计算机视觉

Python+OpenCV计算机视觉

土豆浏览器

土豆浏览器可以用来看各种搞笑、电影、电视剧视频

【数据结构与算法综合实验】欢乐连连看(C++ & MFC)案例

这是武汉理工大学计算机学院数据结构与算法综合实验课程的第三次项目:欢乐连连看(C++ & MFC)迭代开发代码。运行环境:VS2017。已经实现功能:开始游戏、消子、判断胜负、提示、重排、计时、帮助。

php+mysql学生成绩管理系统

学生成绩管理系统,分三个模块:学生,教师和管理员。 管理员模块:负责学生、老师信息的增删改;发布课程信息的增删改,以便让学生选课;审核老师提交的学生成绩并且打印成绩存档;按照课号查询每个课号的学生成绩

多功能数字钟.zip

利用数字电子计数知识设计并制作的数字电子钟(含multisim仿真),该数字钟具有显示星期、24小时制时间、闹铃、整点报时、时间校准功能

推荐24个国外黄色网站欣赏

在中国清朝,明黄色的衣服只有皇子才有资格穿,慢慢的黄色在中国就成了高贵的颜色。在人们的色彩印象中,黄色也表现为暂停。所以当你的网页设计采用黄色的时候,会让人们在你的网页前停留。 黄色,就像橙色和红色,黄色也是一个暖色。它有大自然、阳光、春天的涵义,而且通常被认为是一个快乐和有希望的色彩。黄色是所有色相中最能发光的颜色,给人轻快,透明,辉煌,充满希望的色彩印象。 黄色是一个高可见的色...

u-boot-2015.07.tar.bz2

uboot-2015-07最新代码,喜欢的朋友请拿去

一学即懂的计算机视觉(第一季)

一学即懂的计算机视觉(第一季)

学生成绩管理系统(PHP + MYSQL)

做的是数据库课程设计,使用的php + MySQL,本来是黄金搭配也就没啥说的,推荐使用wamp服务器,里面有详细的使用说明,带有界面的啊!呵呵 不行的话,可以给我留言!

Windows版YOLOv4目标检测实战:训练自己的数据集

Windows版YOLOv4目标检测实战:训练自己的数据集

C++语言基础视频教程

C++语言基础视频教程

玩转Python-Python3基础入门

玩转Python-Python3基础入门

相关热词 c# 开发接口 c# 中方法上面的限制 c# java 时间戳 c#单元测试入门 c# 数组转化成文本 c#实体类主外键关系设置 c# 子函数 局部 c#窗口位置设置 c# list 查询 c# 事件 执行顺序
立即提问